【问题标题】:Detect pop in Navigation Component检测导航组件中的弹出
【发布时间】:2019-04-22 06:13:28
【问题描述】:

在导航组件中,如何检测片段是否从弹出事件中被带到前面?

我从 A 到 B,现在我使用返回键关闭 B,它返回到 A,现在在 A(在 onViewCreated 事件中)我想检测它来自 B。

【问题讨论】:

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


    【解决方案1】:

    这是我的解决方案。

    在 A 中,添加一个默认值为 false 的导航参数(在 nav_graph.xml 中)

    在 B 中,向 A 添加导航。要处理按下的返回按钮,请在 onCreate() 中添加以下内容

    requireActivity().onBackPressedDispatcher.addCallback {
            val action = BDirections.actionBFragmentAFragment(true)
            findNavController().navigate(action)
        }
    

    现在您可以确定 A 的显示方式。另外,使用popUpTo 正确处理循环逻辑。如果您发现这种方法有任何缺陷,请告诉我。

    【讨论】:

      【解决方案2】:

      如果我们使用单个 NavController。

      findNavController((R.id.nav_host_fragment)
          .addOnDestinationChangedListener{ hostController, destination, _ ->
              val push = currentBackStackSize < hostController.bacStack.size // else pop
              // Then save current backstack size
        }
      

      这个解决方案可能并不总是正确的,但目前我想不出极端情况。请随时纠正我。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-07
        • 2019-12-23
        • 1970-01-01
        • 2018-08-06
        • 1970-01-01
        • 2020-04-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多