【问题标题】:How can I pop the back stack from a FragmentActivity to the previous activity?如何将 FragmentActivity 的返回堆栈弹出到上一个活动?
【发布时间】:2019-11-13 21:15:17
【问题描述】:

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

如果QuizActivity 只是一个Activity 而不是FragmentActivity,我可以调用Activity.onBackPressed()QuizActivity 从后面的堆栈中弹出。但是QuizActivityFragmentActivity,而FragmentActivity.onBackPressed() 会从后台堆栈中弹出片段,一次一个。

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

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

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

【问题讨论】:

  • 为什么不让按钮开始一个新的意图以转到所需的活动?您可以在意图中添加额外内容以跟踪它们所处的状态
  • 听起来你想弹出整个活动,对吗?这就是finish() Activity API 的作用。你不这样做有什么原因吗?
  • @Quinn 我考虑过这一点,但我怎么知道要回到哪个活动?他们可能从几个不同的地方来参加当前的活动。
  • @ianhanniballake 是的,你是对的。 ??? (虽然我仍然想知道为什么FragmentManager.getBackStackEntryCount() 给出的值为零。)
  • 如果您使用 Navigation,则返回堆栈位于 NavHostFragmentchildFragmentManager 中,而不是 Activity 的 FragmentManager。

标签: android fragment-backstack


【解决方案1】:

听起来您只需要在QuizActivity 上拨打finish() 即可

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

【讨论】:

  • 哇...拍我的额头(SMF)。
猜你喜欢
  • 2019-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多