【发布时间】:2012-05-09 00:27:26
【问题描述】:
我有一个片段;
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 backstack:
//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
似乎即使我删除了片段,它仍然处于活动状态......为什么?如何停用片段?
【问题讨论】:
-
你的片段是单例吗?如果有的话,给我看看你的 newInstance() 方法。
-
我希望这对某人有所帮助。 stackoverflow.com/a/15263921/541620
-
stackoverflow.com/a/15263921/541620 我希望这可以帮助别人。
-
我希望这对某人有所帮助。 [这里][1] [1]:stackoverflow.com/a/15263921/541620
标签: android android-layout android-intent android-emulator android-fragments