在不进入前一个片段的情况下杀死导航组件中的片段

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,但这会在应用程序退出之前显示第一个片段,这可能是一种不吸引您的行为。