我正在开发一个Android应用程序,遇到了涉及片段和片段事务的错误。我创建了一个示例应用程序来演示问题。这是我在做什么:
- 将
Fragment1
添加到fragmentSpace
中,不添加到返回堆栈。 - 使用
"beginning"
作为返回堆栈的标识,将fragmentSpace
替换为Fragment2
,并将其添加到返回堆栈中。 - 将
Fragment3
添加到Fragment2
内部的fragmentSpace2
中,不添加到返回堆栈。 - 使用
null
作为返回堆栈的标识,将fragmentSpace2
替换为Fragment4
,并将其添加到返回堆栈中。 - 调用
getFragmentManager().popBackStack("beginning", FragmentManager.POP_BACK_STACK_INCLUSIVE);
尝试撤消所有事务,这应该使用户只能看到Fragment1
。
java.lang.IllegalArgumentException: No view found for id 0x7f090004 (me.MitchT.testfragmenttransactions:id/fragmentSpace2) for fragment Fragment3{7f35cb6 #2 id=0x7f090004}
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:886)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
at android.app.BackStackRecord.popFromBackStack(BackStackRecord.java:1645)
...
我发现如果将步骤3添加到后退栈中,步骤5不再导致应用程序崩溃,也不会出现错误。为什么?
我添加步骤3到后退栈的问题是,我希望用户在添加Fragment3
后能够按返回按钮并返回到Fragment1
。如果我将其添加到后退栈中,那么当用户按下返回按钮时,它会删除Fragment3
,但Fragment2
仍然可见,所以他们必须再次按下返回按钮。我试图避免这种双重返回按钮行为。
我觉得没有必要在这个问题上发布示例应用程序中每个文件的代码,因此我创建了一个gist.。
所以我的问题是:
- 为什么会出现这个错误?
- 为什么在将步骤3添加到后退栈后我不再出现错误?
- 是否有更好的方法“回到开头”或一次返回两个片段?
谢谢!
popbackstack()
即可。 - Raghunandan