我有一个FragmentActivity
(称为“ QuizActivity”),用户在其中浏览一系列问题片段,并进行测验。一旦他们到达测验的结尾,他们就会过渡到一个片段(仍在QuizActivity中),以显示测验分数。从那里,我想给用户一个按钮,使他们回到开始QuizActivity之前的活动。我特别不希望该按钮或后退按钮仅弹出后退堆栈,这会使用户回到他们刚刚完成的测验问题中。
如果QuizActivity
只是一个Activity
而不是FragmentActivity
,我可以调用Activity.onBackPressed()
将QuizActivity
弹出堆栈。但是QuizActivity
是FragmentActivity
,并且FragmentActivity.onBackPressed()
一次将片段从后堆栈弹出。
如果可以在QuizActivity中找到第一个片段的ID或名称,则FragmentManager.popBackStack(id or name, POP_BACK_STACK_INCLUSIVE)
应该可以执行我想要的操作。我怎么找到那个?使用导航XML文件将第一个片段导航到。如果第一个片段的名称位于XML导航文档中,那么如何设置它的名称(以便我可以弹出该片段,包括首尾)?我相信,android:name
属性设置片段类,而不是popBackStack所要查找的名称。我是否使用android:label
?
或如何确定ID? XML导航文档中R.id.myFragment
属性的整数值(android:id
)吗? documentation for popBackStack(id, flags)说:“标识符是FragmentTransaction.commit()返回的数字。”但是由于我没有使用FragmentTransaction.commit()
,所以ID是什么?
我尝试使用FragmentManager.getBackStackEntryCount()
,getBackStackEntryAt(i)
和BackStackEntry.getName()
检查后堆栈以查找ID和名称。但是条目数始终为零!当有明显的backStack时,我不知道怎么发生:按“后退”按钮可将我向后移动到前面的片段(测验问题)。
最佳答案
听起来您只需要在finish()
上调用QuizActivity
在带有按钮的片段中,只需使用activity.finish()