Android 如何将后堆栈从碎片活动弹出到上一个活动?

Android 如何将后堆栈从碎片活动弹出到上一个活动?,android,fragment-backstack,Android,Fragment Backstack,我有一个名为QuizActivity的片段活动,用户在其中浏览一系列问题片段,进行测验。在测验结束后,他们会转换到测验活动中显示测验分数的片段。从那里,我想给用户一个按钮,让他们回到他们开始QuizaActivity之前的活动。我特别不希望这个按钮,或者后退按钮,仅仅弹出后堆栈,这会让用户回到他们刚刚完成的测验的问题中 如果QuizaActivity只是一个活动而不是一个片段活动,我可以调用Activity.onBackPressed将QuizaActivity从后堆栈中弹出。但是QuizaAc

我有一个名为QuizActivity的片段活动,用户在其中浏览一系列问题片段,进行测验。在测验结束后,他们会转换到测验活动中显示测验分数的片段。从那里,我想给用户一个按钮,让他们回到他们开始QuizaActivity之前的活动。我特别不希望这个按钮,或者后退按钮,仅仅弹出后堆栈,这会让用户回到他们刚刚完成的测验的问题中

如果QuizaActivity只是一个活动而不是一个片段活动,我可以调用Activity.onBackPressed将QuizaActivity从后堆栈中弹出。但是QuizaActivity是一个FragmentActivity,FragmentActivity.onBackPressed会从后堆栈中弹出片段,一次一个

FragmentManager.popBackStackid或name,POP_BACK_STACK_INCLUSIVE应该可以执行我想要的操作,前提是我可以找到QuizaActivity中第一个片段的id或名称。我怎么找到它?使用导航XML文件导航到第一个片段。如果第一个片段在XML导航文档中,我如何设置它的名称以便可以返回到它(包括它)?android:name属性设置的是fragment类,我相信不是popBackStack会寻找的名称。我是否使用android:label

或者如何确定ID?它是XML导航文档中android:id属性的整数值R.id.myFragment吗?表示标识符是FragmentTransaction.commit返回的数字。但是由于我没有使用FragmentTransaction.commit,那么ID是什么


我尝试使用FragmentManager.getBackStackEntryCount、getBackStackEntryAti和BackStackEntry.getName检查后堆栈以查找ID和名称。但进入计数始终为零!我不明白这是怎么发生的,当有明显的倒退时:按下后退按钮会使我在前面的问答题中后退。

听起来你只需要在问答活动中调用finish


在带有按钮的片段中,只需使用activity.finish,听起来您只需在QuizaActivity上调用finish


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

为什么不让按钮启动新的意图以转到所需的活动?你可以放一些额外的东西来跟踪它们的状态。听起来你想弹出整个活动,对吗?这就是活动的finishapi所做的。“你不这么做有什么原因吗?”奎因我考虑过,但我怎么知道你想要回到什么样的活动中去呢?他们可能是从几个不同的地方来参加这次活动的。@ianhanniballake是的,你说得对。如果您使用的是导航,则后堆栈位于NavHostFragment的childFragmentManager中,而不是活动的FragmentManager中。为什么不让按钮启动新的意图以转到所需的活动?你可以放一些额外的东西来跟踪它们的状态。听起来你想弹出整个活动,对吗?这就是活动的finishapi所做的。“你不这么做有什么原因吗?”奎因我考虑过,但我怎么知道你想要回到什么样的活动中去呢?他们可能是从几个不同的地方来参加这次活动的。@ianhanniballake是的,你说得对。如果您使用的是导航,则后堆栈位于NavHostFragment的childFragmentManager中,而不是活动的FragmentManager中。哇。。。拍我的额头SMF。哇。。。拍打我的额头。