如何将返回堆栈从 FragmentActivity 弹出到前一个 activity?

How can I pop the back stack from a FragmentActivity to the previous activity?

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

如果 QuizActivity 只是一个 Activity 而不是 FragmentActivity,我可以调用 Activity.onBackPressed()QuizActivity 从返回堆栈中弹出。但是 QuizActivity 是一个 FragmentActivity,并且 FragmentActivity.onBackPressed() 从后栈弹出 片段 ,一次一个。

FragmentManager.popBackStack(id or name, POP_BACK_STACK_INCLUSIVE) 如果我能在 QuizActivity 中找到第一个片段的 ID 或名称,应该可以做我想做的事。我怎么找到它?第一个片段使用导航 XML 文件导航到。如果第一个片段在 XML 导航文档中,我该如何设置它的名称(这样我就可以返回到它,包括在内)?我相信 android:name 属性设置片段 class,而不是 popBackStack 会查找的名称。我使用 android:label 吗?

或者如何确定ID?它是 XML 导航文档中 android:id 属性的整数值(R.id.myFragment)吗? documentation for popBackStack(id, flags) 表示 "The identifier is the number returned by FragmentTransaction.commit()." 但由于我没有使用 FragmentTransaction.commit(),ID 是什么?

我尝试使用 FragmentManager.getBackStackEntryCount()getBackStackEntryAt(i)BackStackEntry.getName() 检查返回堆栈以查找 ID 和名称。但是条目计数始终为零!我不明白这是怎么发生的,当明显有一个 backStack 时:按下后退按钮让我向后浏览前面的片段(测验的问题)。

听起来您只需要在 QuizActivity

上调用 finish()

在带有按钮的片段中只需使用 activity.finish()