我有一个片段;
MyFragment myFrag = new MyFragment();
我将捆绑数据放入此片段:
Bundle bundle = new Bundle();
bundle.putString("TEST", "test");
myFrag.setArguments(bundle);
然后,我用这个替换旧片段并放入 backstack:
//replace old fragment
fragmentTransaction.replace(R.id.fragment_placeholder, myFrag, "MyTag");
//put on backstack
fragmentTransaction.addToBackStack(null);
//commit & get transaction ID
int transId = fragmentTransaction.commit();
稍后,我使用上面的事务 ID( )弹出回栈transId
:
//pop the transaction from backstack
fragmentManager.popBackStack(transId,FragmentManager.POP_BACK_STACK_INCLUSIVE);
后来,我再次将捆绑数据设置为我的片段(myFrag
)的参数:
//Got Java.lang.IllegalStateException: fragment already active
myFrag.setArguments(bundle);
如您所见,我上面的代码出现异常Java.lang.IllegalStateException: fragment already active
。我不明白为什么 myFrag
尽管我已经从后台弹出了它的事务,但它仍然处于活动状态。,无论如何,自从我遇到异常以来,我认为我别无选择,只能停用片段,所以,我做了:
Fragment activeFragment = fragMgr.findFragmentByTag("MyTag");
fragmentTransaction.remove(activeFragment);
我不确定我上面的代码是否真的可以停用片段,因为我没有找到如何停用片段。:(
之后,当我再次尝试将捆绑数据设置到我的片段myFrag
时,我仍然遇到同样的错误:
Java.lang.IllegalStateException: fragment already active
似乎即使我删除了片段,它仍然处于活动状态......为什么?如何停用片段?