2012-01-26 58 views
9
  1. 活動1可見。按一個按鈕,並打開活動2。
  2. 活動2增加了片段A到自身(和背面疊層),它顯示優良
  3. 按下片段轉變內的按鈕到另一個片段,B
  4. 按返回。什麼都沒發生。咦?後面的印刷機看起來被吸收了而沒有起作用,顯示器仍然保持不變。
  5. 第二次按回來,它恢復到活動1,如預期。

爲什麼我的片段不能在步驟4中顯示?我已經將片段添加到後端堆棧,爲什麼(當後退按鈕似乎意識到它的存在時)它不會顯示片段?爲什麼Fragment.addToBackStack()導致後退按鈕不執行任何操作?

下面的代碼我使用的活動2打開片段A.

protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
    setContentView(R.layout.act_profile_edit); 
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
    transaction.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right); 
    transaction.addToBackStack(null); 
    transaction.add(android.R.id.content, new MyFragment()); 
    transaction.commit(); 
} 

而這裏的開片段B

FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
    transaction.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right); 
    transaction.add(android.R.id.content, new MyOtherFragment()); 
    transaction.commit(); 

回答

10

您是否嘗試過transaction.replace(...),而不是transaction.add(...)的代碼?這應該工作。我猜,因爲如果你只是增加一個片段在另一方面,它沒有看到交易爲想要回到來回片段A.

編輯 對這個問題的回答實際低於在評論:應該在代替的片段上使用addToBackStack(),而不是被替換的片段。

+0

這沒有幫助。如果我最初使用替換(而不是添加),則不需要替換片段,因此我期望它的行爲相同。如果我使用替換來顯示片段B,它會覆蓋我想讓人們使用的那個Back返回,所以這沒有幫助。 –

+0

好吧,這兩個片段屬於不同的幀? –

+0

和你放置片段B的代碼是什麼? –

相關問題