我有一个FragmentActivity(称为“ QuizActivity”),用户在其中浏览一系列问题片段,并进行测验。一旦他们到达测验的结尾,他们就会过渡到一个片段(仍在QuizActivity中),以显示测验分数。从那里,我想给用户一个按钮,使他们回到开始QuizActivity之前的活动。我特别不希望该按钮或后退按钮仅弹出后退堆栈,这会使用户回到他们刚刚完成的测验问题中。

如果QuizActivity只是一个Activity而不是FragmentActivity,我可以调用Activity.onBackPressed()QuizActivity弹出堆栈。但是QuizActivityFragmentActivity,并且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()

10-07 19:41
查看更多