0

我打開「活動A」。 「活動A」立刻做了FragmentTransaction這樣打開「片段A」:無法添加到片段Back Stack

FragmentTransaction t = fm.beginTransaction(); 
ListFragment f = new ProfileFragment(); 
t.replace(R.id.main_frag, f, "act_frag"); 
f.setArguments(args); 
t.commit(); 

「片段A」上有一個按鈕,我想開一個新的Fragment(「片段B」),但將「片段A」放在後臺 - 所以如果用戶回擊,它仍然在附近。所以我這樣做:

FragmentTransaction t = fm.beginTransaction(); 
ListFragment f = new FollowFragment(); 
String username = tvUser.getText().toString(); 
Bundle args = new Bundle(); 
args.putString("follow", "watching"); 
args.putString("userprofile", username); 
args.putInt("userIdprofile", userId); 
f.setArguments(args); 
t.replace(R.id.main_frag, f, "watching_frag"); 
t.addToBackStack("watching_frag"); 
t.commit(); 

我想加入t.addToBackStack(null);會做的伎倆;我之前就這樣做過。但是,當用戶反擊時,它只是關閉「活動A」。

回答

1

默認情況下,當後退按鈕被按下時,活動關閉。我認爲你正在嘗試做的,你就必須重寫onBackPressed的方法和添加代碼來處理 例如:

@Override 
public void onBackPressed() { 

    FragmentManager fm = getSupportFragmentManager(); 
    if(fm.getBackStackEntryCount() > 0){ 
     fm.popBackStack(); 
     return; 
    } 
    super.onBackPressed(); 
} 

這樣,推壓回去的時候,它會首先檢查當按下後退時,會有任何後臺條目和回彈。如果沒有,則會調用默認操作。

+0

我認爲你是對的。讓我添加並看看。 – KickingLettuce 2014-10-27 17:57:28

+0

就是這樣,謝謝。標記正確。 – KickingLettuce 2014-10-27 18:03:32

+0

等待..是用於添加「片段A」或「活動」中發生的「片段B」的片段事務嗎? – Eric 2014-10-27 18:03:44

0

你試過在t.addtoBackStack裏面放一些值而不是在空嗎? 我現在無法測試,但我認爲這可能是您的問題。

+0

謝謝,但這沒有奏效;我改變了上面的代碼以反映我所做的。 – KickingLettuce 2014-10-27 17:42:37

+0

那很奇怪。我測試了你的代碼,它工作得很好。你有沒有機會重寫onBackPressed()? – Vextil 2014-10-27 17:51:13