7

Intent.FLAG_ACTIVITY_CLEAR_TOP adlı kullanıcının davranışını izliyorum. Örneğin Bayrak Etkinliği Açık Üst hedef etkinliği yok eder ve oluşturmaya başlar

i Şimdi Akış üç faaliyetleri A, B ve C sahip A -> B -> C

Şimdi ben kodu aşağıdaki ile bu bayrağıyla C A başlıyorum zaman.

Intent intent_to_a=new Intent(C.this,A.class); 
       intent_to_home.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       startActivity(intent_to_a); 

AFAIK, Intent.FLAG_ACTIVITY_CLEAR_TOP B kaldırmak gerekir ve A .Bu da aynısını yapar ama garip bir şekilde devam etmelidir. B'yi kaldırır, A'yı yaratır. A dan yola çıkar. Herkes bana uygun mu, değil mi? Eğer onu yok etmek istemezsem ne yapmalıyım?

+2

bakmak, bu http://developer.android.com/reference/android/content/Intent.html –

+1

evet, ben de o baktı istediğini daha yakın olan, ama aynı zamanda B istiyorum imha edilmek üzere, FLAG_ACTIVITY_REORDER_TO_FRONT yalnızca B'yi kaldırmadan ActivityStack'ın üstüne koydu. –

+1

belki de B'yi kendi kendine bitirmek için LocalBroadCastManager'ı kullanabilir ve sonra Reorder_to_front'u kullanabilirsin? –

cevap

3

FLAG_ACTIVITY_REORDER_TO_FRONT öğelerini kullanın ve ardından B öğesinin bitmesini söylemek için bir niyet kullanın.

B Etkinliği:

private BroadcastReceiver finishReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      finish(); 
     } 
    }; 
public void onCreate() { 
LocalBroadcastManager.getInstance(this) 
       .registerReceiver(finishReceiver , 
         new IntentFilter("B-finish")); 
} 
public void onDestroy() { 
     LocalBroadcastManager.getInstance(this).unregisterReceiver(
       finishReceiver); 
} 

Activity C:

LocalBroadcastManager.getInstance(this).sendBroadcast(
       new Intent("B-finish")); 
Intent intent_to_a=new Intent(C.this,A.class); 
       intent_to_home.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
       startActivity(intent_to_a); 
+0

Hey, benim mevcut android sürümünde LocalBroadcastManager gibi herhangi bir sınıf bulamıyorum, ben android sürüm 2.3.3, api level 10. kullanıyorum –

+0

destek kütüphanesi v4 http eklemeniz gerekir : //developer.android.com/tools/extras/support-library.html –

2

Ya
. Aktivite A'nın launchMode'unu standarttan başka bir şeye değiştirin (örn. singleTask veya bir şey). Sonra bayrak FLAG_ACTIVITY_CLEAR_TOP Etkinlik A.

ya,

yeniden olmayacaktır. Bayrağınız olarak Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP kullanın. Sonra arzu ettiğiniz şekilde çalışır.

This question has good discussion on same topic
Android documentation diyor -

yukarıdaki örnekte aktivite B'nin anda çalışan örneği onun onNewIntent() yönteminde burada başlıyor yeni niyet alacak ya ya kendisi bitmiş ve yeniden başlatılması yeni niyetle.

"Çoklu" (varsayılan) olacak şekilde başlatma modunu bildirdiyse ve aynı amaçla FLAG_ACTIVITY_SINGLE_TOP değerini ayarlamadıysanız, o zaman bitecek ve yeniden oluşturulacak; Diğer tüm başlatma modları için veya FLAG_ACTIVITY_SINGLE_TOP ayarlanmışsa, bu niyet geçerli örneğin onNewIntent() öğesine gönderilir. FLAG_ACTIVITY_REORDER_TO_FRONT içine