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