2013-05-08 76 views
0

我有兩個活動,「A」和「B」,其中「A」打開「B」。當用戶點擊活動「B」上的後退按鈕時,我不想看到「A」,我只想關閉「A」。因此,在 「B」 我這樣做:Android:關閉您的前任的活動

@Override 
    public void finish() { 
     // TODO Auto-generated method stub 

     Intent intent = new Intent(this, LoginActivity.class).putExtra(TAG, TAG).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);            
     startActivity(intent); 
     //super.finish(); 
    } 

而且在活動 「A」,我這樣做:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState);   

     if(getIntent().getExtras() != null) 
      if(getIntent().getStringExtra(HomeActivity.TAG) != "") 
       finish();    

    } 

它完美,而是i'm得到這個異常:

E/ActivityThread(11115): Activity br.com.pedmobiledroid.view.controller.LoginActivity has leaked IntentReceiver com.a[email protected]42045be0 that was originally registered here. Are you missing a call to unregisterReceiver()? 

有人知道更好的方法來正確地做到這一點嗎?

+0

我question.Are你使用的任何活動內接收器有兩個?第二,爲什麼你在發射B的時候完成A,如果你想在B完成後完成B – Sameer 2013-05-08 14:09:59

回答

0

只需撥打ActivityAfinish()開始ActivityB後:

Intent intent = new Intent(ActivityA.this, ActivityB.class); 
startActivity(intent); 
finish(); 
+0

就是這樣,工作!非常感謝! – erickles 2013-05-08 14:20:29

+0

@erickles,不客氣。 () – Egor 2013-05-08 14:24:32

+0

@Egor我認爲finish()沒有被執行。不是在控件命中完成之前已經啓動的新活動() – tez 2013-05-08 14:42:56

0

好的,你需要重新排序你的邏輯。

,而不是殺傷活性一個從活動B到來時,只需殺了一個活動,如果它要活動B.這樣的話,它不會在堆棧中,當用戶按下回:)

所以,從A:

Intent startActivityBIntent = new Intent(this, MyClassB.class); 
startActivity(startActivityBIntent); 
this.finish(); 

就這樣,活動B上不需要代碼,因爲A已經完成自己。

+0

明白了,謝謝兄弟! – erickles 2013-05-08 14:28:01