片段已添加IllegalStateException异常 [英] Fragment already added IllegalStateException
问题描述
我用这个方法对我的容器的活动表现出BFrag
公共无效showBFrag()
{
//开始一个新的FragmentTransaction
FragmentTransaction fragmentTransaction = mFragmentMgr.beginTransaction();
如果(mBFrag.isAdded())
{
Log.d(LOG_TAG,展()BFrag);
fragmentTransaction.show(mBFrag);
}
其他
{
Log.d(LOG_TAG,更换AFrag - > BFrag);
fragmentTransaction.replace(R.id.operation_fragments_frame,mBFrag);
}
//保持在后面堆栈中的事务,因此将发生逆转时,后退按钮是pressed
fragmentTransaction.addToBackStack(空);
//提交事务
fragmentTransaction.commit();
}
我把它从我的容器的活动;首次
- 进入else语句和mBFrag更换mAFrag。
然后我preSS后退按钮:
- ,操作是相反的(mAFrag示出但..没有mBFrag除去?)。
然后我再往前走由同一活动调用showBFrag():
- 连带又进了else语句。 (这样我就可以推断出mBFrag不添加)
- ,但我得到了一个碎片已添加IllegalStateException异常 ...(所以为什么没有进入if语句呢?)
所以:
- 为什么isAdded()方法没有返回TRUE,如果我得到一个碎片已添加IllegalStateException异常?
- 是否popBackStack操作完全删除previously添加片段?
- 在我误解是什么行为?
编辑: 下面是异常的完整信息。
12月6日至七日:08:32.730:ERROR / AndroidRuntime(8576):java.lang.IllegalStateException:碎片已添加:BFrag {40b28158 ID = 0x7f0c0085}
12月6日至七日:08:32.730:ERROR / AndroidRuntime(8576):在android.app.BackStackRecord.doAddOp(BackStackRecord.java:322)
12月6日至七日:08:32.730:ERROR / AndroidRuntime(8576):在android.app.BackStackRecord.replace(BackStackRecord.java:360)
12月6日至七日:08:32.730:ERROR / AndroidRuntime(8576):在android.app.BackStackRecord.replace(BackStackRecord.java:352)
12月6日至七日:08:32.730:ERROR / AndroidRuntime(8576):在myPackageName.containerActivity.showBFrag()//这行:fragmentTransaction.replace(R.id.operation_fragments_frame,mBFrag);
最后,我的解决方法已经执行previous片段删除(),并添加()新的。虽然这就是<一href="http://developer.android.com/reference/android/app/FragmentTransaction.html#replace%28int,%20android.app.Fragment,%20java.lang.String%29">replace() 是为了做方法...
但我仍然猜测为什么replace()方法并没有在这种情况下工作得很好......真是奇怪,我想放弃,这是因为我误解的东西,或做错了什么。
I use this method on my container Activity to show a BFrag
public void showBFrag()
{
// Start a new FragmentTransaction
FragmentTransaction fragmentTransaction = mFragmentMgr.beginTransaction();
if(mBFrag.isAdded())
{
Log.d(LOG_TAG, "Show() BFrag");
fragmentTransaction.show(mBFrag);
}
else
{
Log.d(LOG_TAG, "Replacing AFrag -> BFrag");
fragmentTransaction.replace(R.id.operation_fragments_frame, mBFrag);
}
// Keep the transaction in the back stack so it will be reversed when backbutton is pressed
fragmentTransaction.addToBackStack(null);
// Commit transaction
fragmentTransaction.commit();
}
I call it from my container Activity; for the first time:
- gets into the else statement and mBFrag replace mAFrag.
Then I press the back button:
- and the operation is reversed (mAFrag is shown but.. does mBFrag is removed?).
Then I go forward again by calling showBFrag() from the same Activity:
- and it gets AGAIN into the else statement. (so I can deduce that mBFrag is NOT ADDED)
- but I got a Fragment already added IllegalStateException... (so why it didn't get into the if statement instead?)
So:
- Why is the isAdded() method not returning TRUE if I'm getting a Fragment already added IllegalStateException??
- Does popBackStack operation completely remove previously added fragments?
- What behaviour am I misunderstanding?
EDIT: Here is the complete info of the exception.
06-07 12:08:32.730: ERROR/AndroidRuntime(8576): java.lang.IllegalStateException: Fragment already added: BFrag{40b28158 id=0x7f0c0085}
06-07 12:08:32.730: ERROR/AndroidRuntime(8576): at android.app.BackStackRecord.doAddOp(BackStackRecord.java:322)
06-07 12:08:32.730: ERROR/AndroidRuntime(8576): at android.app.BackStackRecord.replace(BackStackRecord.java:360)
06-07 12:08:32.730: ERROR/AndroidRuntime(8576): at android.app.BackStackRecord.replace(BackStackRecord.java:352)
06-07 12:08:32.730: ERROR/AndroidRuntime(8576): at myPackageName.containerActivity.showBFrag() // This line: "fragmentTransaction.replace(R.id.operation_fragments_frame, mBFrag);"
Finally my workaround has been to execute remove() of the previous fragment and add() the new one. Although that's what replace() method was meant to do...
But I still guessing why replace() method didn't worked fine in this case... is really weird and I want to discard that it is because I am misunderstanding something or doing something wrong.
这篇关于片段已添加IllegalStateException异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!