【问题标题】:Killing Fragment in Navigation Components without going previous fragment杀死导航组件中的片段而不去上一个片段
【发布时间】:2021-10-09 16:39:31
【问题描述】:

我有两个片段(如以下代码)。当我从第一个片段切换到第二个片段后,当我点击返回按钮时,它会返回到第一个片段,我不想这样做。

这是我的代码 nav_graph

<navigation>
  <fragmentone>
    <action
      destination= fragmenttwo/>
  </fragmentone>
  <fragmenttwo>
  </fragmenttwo>
</navigation>

如何导航第二个片段,就像我们用来更改 Activity 一样 finish();

【问题讨论】:

  • 那么,当点击后退按钮时,你想去哪里而不是第二个片段?
  • 我从第一个片段切换到第二个片段,当我点击返回按钮时,如果当前片段是第二个片段,我想退出整个应用程序(不回到第一个片段)

标签: android android-fragments android-architecture-navigation


【解决方案1】:

在设计选项卡中,您将看到一个弹出行为部分

在弹出窗口中,选择片段 1

在弹出到包容中,选择true

【讨论】:

    【解决方案2】:

    退出应用程序或(完成导航组件活动)与传统方式没有太大区别,但您需要捕获的是要完成活动的片段上的后按按钮事件。

    As per documentation,当前捕捉后按按钮的有效方法是使用OnBackPressedDispatcher,这里有一个演示:

    在第二个片段上,注册OnBackPressedDispatcher 并在handleOnBackPressed() 回调上处理完成活动:

    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结束前弹出回栈到第一个目的fragment,但这会显示之前的第一个fragment应用退出,这可能是一种不吸引您的行为。

    【讨论】:

      猜你喜欢
      • 2019-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多