在不进入前一个片段的情况下杀死导航组件中的片段
Killing Fragment in Navigation Components without going previous fragment
我有两个片段(如以下代码)。在我从第一个片段切换到第二个片段后,当我点击后退按钮时,它又回到了第一个片段,我不想这样。
这是我的代码
nav_graph
<navigation>
<fragmentone>
<action
destination= fragmenttwo/>
</fragmentone>
<fragmenttwo>
</fragmenttwo>
</navigation>
如何像我们以前更改 Activity 那样导航第二个片段
finish();
在设计选项卡中,您会看到弹出行为部分
弹出,select 片段 1
在pop up to inclusive,select true
退出应用程序或(完成导航组件 activity)与传统方式没有太大区别,但您需要捕捉的是您要完成的片段上的后退按钮事件activity 上。
As per documentation,目前捕获后退按钮的有效方法是使用OnBackPressedDispatcher
,这里是一个演示:
在第 2 个片段中,注册 OnBackPressedDispatcher
并在 handleOnBackPressed()
回调中处理完成 activity:
requireActivity().onBackPressedDispatcher.addCallback(
viewLifecycleOwner,
object : OnBackPressedCallback(true) {
override
fun handleOnBackPressed() {
// findNavController().popBackStack() // Popup to the first destination fragment
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
requireActivity().finishAndRemoveTask()
} else {
requireActivity().finish()
}
}
})
注意:你可以在完成activity之前使用findNavController().popBackStack()
,如果你想在完成之前将返回堆栈弹出到第一个目标片段activity,但这会在应用程序退出之前显示第一个片段,这可能是一种不吸引您的行为。
我有两个片段(如以下代码)。在我从第一个片段切换到第二个片段后,当我点击后退按钮时,它又回到了第一个片段,我不想这样。
这是我的代码 nav_graph
<navigation>
<fragmentone>
<action
destination= fragmenttwo/>
</fragmentone>
<fragmenttwo>
</fragmenttwo>
</navigation>
如何像我们以前更改 Activity 那样导航第二个片段
finish();
在设计选项卡中,您会看到弹出行为部分
弹出,select 片段 1
在pop up to inclusive,select true
退出应用程序或(完成导航组件 activity)与传统方式没有太大区别,但您需要捕捉的是您要完成的片段上的后退按钮事件activity 上。
As per documentation,目前捕获后退按钮的有效方法是使用OnBackPressedDispatcher
,这里是一个演示:
在第 2 个片段中,注册 OnBackPressedDispatcher
并在 handleOnBackPressed()
回调中处理完成 activity:
requireActivity().onBackPressedDispatcher.addCallback(
viewLifecycleOwner,
object : OnBackPressedCallback(true) {
override
fun handleOnBackPressed() {
// findNavController().popBackStack() // Popup to the first destination fragment
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
requireActivity().finishAndRemoveTask()
} else {
requireActivity().finish()
}
}
})
注意:你可以在完成activity之前使用findNavController().popBackStack()
,如果你想在完成之前将返回堆栈弹出到第一个目标片段activity,但这会在应用程序退出之前显示第一个片段,这可能是一种不吸引您的行为。