在导航组件中检测弹出

时间:2019-04-22 06:13:29

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

在导航组件中,如何检测片段是否从弹出事件中出现?

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

2 个答案:

答案 0 :(得分:1)

如果我们使用单个 NavController。

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

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

答案 1 :(得分:0)

这是我的解决方法。

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

在B中,向A添加导航。要处理按下的后退按钮,请在onCreate()

中添加以下内容
requireActivity().onBackPressedDispatcher.addCallback {
        val action = BDirections.actionBFragmentAFragment(true)
        findNavController().navigate(action)
    }

现在,您可以确定A的显示方式。另外,使用popUpTo正确处理循环逻辑。让我知道您是否发现此方法有任何缺陷。