2015-01-03 56 views
0

我有一個活動,我添加一個ListFragment。當我點擊一個按鈕時,一個新的片段替換了ListFragment。我使用addTobackStack(null),所以當我按下後退按鈕時,我將結束到ListFragment。如果用戶沒有按下背面,而是點擊一個按鈕,然後他去到另一個新的片段。從那裏我希望用戶回到ListFragment,所以我不使用addTobackStack()當我做的fragmentTransaction。通知onbackpressed()從哪個片段被調用

的模式是:

ListFragment -------> GameFragment --------> EndFragment 

GameFragment我可以回去ListFragmentEndFragment我必須去ListFragment而不是GameFragment

所以我猜我總得有覆蓋onBackPressed()在我的活動,所以當我在EndFragment進行交易的ListFragment

的問題是我不知道如何參考EndFragment當我重寫onBackPressed()

(除非有執行此操作的更好的方式...)

onBackPressed()的代碼,我用現在:

@Override 
public void onBackPressed() { 
    if (getSupportFragmentManager().getBackStackEntryCount() == 0) { 
     Log.i("FINISH", "Finish"); 
     finish(); 
    } else { 
     Log.i("FINISH", "POP STACK"); 
     getSupportFragmentManager().popBackStack(); 
    } 
} 

回答

0

更好的方法是從BackStack中刪除您的AF活動,該活動包含所有先前的活動,以及後退按鈕用於查找以前活動的位置。

對於這一點,在你的AF活動中,FLAG_ACTIVITY_CLEAR_TOP標誌添加到您的意圖,像這樣:

Intent intent = new Intent(this, BF.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent); 

另一種選擇是重寫當你按下後退按鈕會發生什麼。重寫onBackPressed()方法:

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    Intent intent = new Intent(this, BF.class); 
    goToMainActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(goToMainActivity); 
} 
+0

它們不是活動。他們是碎片。對於我的帖子造成的誤解抱歉,我做了一些編輯,以便我可以更容易理解。 – mt0s