2011-10-29 27 views
6

ile Android aktiviteleri arasında geçiş yapın. Android uygulamasında iki ayrı ama ilgili üst düzey ekran/etkinlik var. Bunlar için iki ayrı başlatıcı ikonuna sahip olmak istiyorum, ancak kullanıcının ViewPager ile olduğu gibi aralarında "kaydırmasını" sağlayın. GördüğümViewPager

seçenekleri şunlardır:

  1. iki ayrı Faaliyetlerin uygulanması ve bir şekilde aralarında kaydırarak izin verir. Sorunlar, ViewPager'ın iki ayrı etkinlikle kullanılamamasıdır.

  2. İki parçadan oluşan tek bir etkinlik uygulayın ve aralarında geçiş yapmak için ViewPager'ı kullanın. Kaydırma işlemi basittir, ancak otomatik olarak doğru fragmana geçiş yapan iki fırlatıcıya sahip olmak mümkün mü?

Yukarıdaki iki seçenek arasından herhangi biri uygulanabilir mi, yoksa deneyebileceğim başka bir şey var mı?

cevap

1

Çözüm 1: Her seferinde diğer Faaliyete başlamak açısından hızlıca kaydırabilirsiniz. Bu durumda, iki aktivite için geçiş animasyonu düzeltmek için "kaydırma" efekti elde etmek ve görevinizde birden çok örneğe sahip olmamak için iki etkinliği SingleTask olarak ayarlamanız gerekir (bu nedenle onNewIntent() yöntemini uygulamanız gerekir) .

Çözüm 2: Bunu yapmak mümkündür. Başlatıcı simgesine bağlı olarak, her seferinde uygun parçayı başlatmalı ve göstermeli ve daha sonra görünümleri değiştirmek için kaydırmayı kullanmalısınız.

Bu yardımcı olur umarız!

+0

Çözüm 2 için hangi başlatıcı simgesinin kullanıldığını nasıl tespit edersiniz? Bu bilgi lansman amacında mevcut mu? – Ralf

+0

Parçaları işleyen etkinliği başlatan hedefe ekstra ekleyebilirsiniz. –

+0

Etkinliği başlatmak için iki ana ekran başlatıcısı istiyorum, bu nedenle bu amaçlara fazladan ekleyemiyorum. – Ralf

2

İkinci çözüm denedim, ancak sorun, tek bir etkinliğin hangi başlatıcı simgesinin kullanıldığını algılayamamasıdır (lütfen yanılıyorsa bana bildirin).

Çözümüm, iki "kukla" etkinlik eklemek ve daha sonra ana etkinliği doğru "sayfa" sayısı olan başlatmaktı. Bu yaklaşımdaki zorluk, görev yığınının düzgün bir şekilde ele alınmasıdır. Başlatıcı seçildiğinde, kukla etkinlik başlatılmalı ve ana etkinliğe bir niyet göndermelidir. Android bunu yapmanı engellemek için gerçekten çok uğraşır ve sadece son etkinliği tekrar öne çıkar. (LaunchActivity2 için benzer)

kukla faaliyetleri: Ana etkinlikte

public class LaunchActivity1 extends Activity { 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     Intent newIntent = new Intent(this, MainActivity.class); 
     newIntent.putExtra(MainActivity.EXTRA_PAGE, 1); 
     newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(newIntent); 
     finish(); 
    } 
} 

:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.main); 
    ViewPager viewPager = (ViewPager)findViewById(R.id.MainViewPager); 
    viewPager.setAdapter(new MyAdapter(getSupportFragmentManager())); 

    int page = getIntent().getIntExtra(EXTRA_PAGE, -1); 
    if(page >= 0 && page <= NUM_ITEMS) 
     viewPager.setCurrentItem(page); 
} 

public void onNewIntent(Intent intent) { 
    if(intent.hasExtra(EXTRA_PAGE)) { 
     int page = intent.getIntExtra(EXTRA_PAGE, -1); 
     ViewPager viewPager = (ViewPager)findViewById(R.id.MainViewPager); 
     if(page >= 0 && page <= NUM_ITEMS) 
      viewPager.setCurrentItem(page); 
    } 
} 

AndroidManifest.xml

Bu benim ile gelebilir en iyisi:

( ) Farklı görev ilişkilerine sahip olan sorun, hem başlatıcıların hem de ana görevlerin "Son Uygulamalar" listesinde yer almasıdır.

Bu yaklaşımı başkalarına tavsiye etmem - yalnızca tek bir başlatıcı simgesi kullanıyorum.

0

Bu eski olduğunu biliyorum, ama aynı soruna baktığımda aldığım ilk soru.

Buradaki çözümü burada bulabilirsiniz: ViewPager for multiple Activities, Fragmanlar ...(Ayrıca, Android'in önceki sürümlerinde çalıştırmanız gerekirse, destek kitaplığında da bulunur)

0

Çözüm 2'ye giderim, kukla etkinliklere gerek yok, uygulamanızın lansmanını yavaşlatır, bunun yerine Bu gibi, Manifest'te etkinlik-takma adları ekleyebilirsiniz:

<activity-alias 
     android:name=".MySecondLauncher" 
     android:exported="true" 
     android:icon="@drawable/my_second_icon" 
     android:label="@string/my_second_launcher" 
     android:targetActivity=".MainScreen"> 
     <meta-data 
      android:name="secondLauncher" 
      android:value="true" /> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity-alias> 

Sonra mainScreen aktivitede, size olan çağrıldı başlatıcısı olan kontrol edebilirsiniz, bunu yapabilirsiniz başlatıcısı aktivite-takma adını arayarak, veya eklediğim meta verileri kontrol ederek:

veya:

ActivityInfo info = getPackageManager().getActivityInfo(intent.getComponent(),PackageManager.GET_META_DATA); 
boolean secondLauncher = info.metaData.getBoolean("secondLauncher", false);