5

我称此方法为从 AFrag 前进到 BFrag:

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 语句......我得到了例外。

请对我做错什么有任何见解吗?

谢谢。

4

1 回答 1

4

您是否尝试过使用其他方法,例如 remove(),然后执行 add()。或类似的东西?我在其他帖子上看到 replace() 方法并不总是正确运行。

于 2011-06-10T07:16:12.027 回答