5

我把這種方法從AFrag往前走BFrag:片段的行爲:FragmentTransaction ::代替()和反向堆棧中操作

showFragment() 
{ 
    FragmentTransaction fragmentTransaction = mFragmentMgr.beginTransaction(); 

    // Add fragment to the container ContentView 
    fragmentTransaction.replace(R.id.operation_fragments_frame, mBFrag, mBFrag.getTag()); 

    // Add FADE effect 
    fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 

    // Keep the transaction in the back stack so it will be reversed when backbutton is pressed 
    fragmentTransaction.addToBackStack(null); 

    // Commit transaction 
    fragmentTransaction.commit(); 
} 

它顯示了一個新的片段(BFrag),取代以前的一個(AFrag )並保存有關交易的信息,因此可以在按下後退按鈕時自動撤銷/撤銷。

當後退按鈕被按下時,一切都看起來很好,前一個片段顯示(AFrag)。但是當我再次前進時(AFrag - > BFrag),我得到了「碎片已經添加的異常」。

未反轉/撤銷操作是否刪除新片段(BFrag)?這是預期的行爲?

這是因爲在此之後,我決定成立一個檢查的怪異:

if(mBFrag.isAdded()) 
{ 
    fragmentTransaction.show(mBFrag); 
} 
else 
{ 
    fragmentTransaction.replace(R.id.operation_fragments_frame, mBFrag, mBFrag.getTag()); 
} 

和劇照,它進入else語句...我得到的異常。

請問我在做什麼錯誤?

Thx。

回答

4

您是否嘗試過使用其他方法,如remove(),然後執行add()。或類似的東西?我在其他一些文章中看到,replace()方法並不總是正確行事。

+0

沒錯,答案和你所談論的其他職位是我哥們的xD http://stackoverflow.com/questions/6250580/fragment-already-added-illegalstateexception THX反正 – 2011-06-10 08:13:11

+0

我很高興聽到這一點,我只是想知道錯誤與我的代碼一如既往。謝謝你澄清。 – 2017-08-02 17:02:31