如何将返回堆栈从 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()
我有一个 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()