在导航组件中,如何检测片段是否从弹出事件中出现?
我从A转到B,现在我使用后退键关闭B,它返回到A,现在在A中(在 onViewCreated 事件中),我想检测到它来自B。
答案 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正确处理循环逻辑。让我知道您是否发现此方法有任何缺陷。