检测导航组件中的弹出窗口

4
在导航组件中,如何检测片段是否从弹出事件中前往前台? 我从A到B,现在我使用返回键关闭了B,它返回到A,在A中(在onViewCreated事件中),我想检测它是来自B的。
2个回答

2
如果我们正在使用单个NavController。
findNavController((R.id.nav_host_fragment)
    .addOnDestinationChangedListener{ hostController, destination, _ ->
        val push = currentBackStackSize < hostController.bacStack.size // else pop
        // Then save current backstack size
  }

这个解决方案可能不会始终正确,但目前我想不到任何边缘情况。请随时纠正我。

在 Fragment-A 中,您可以添加以下检查以确保它不会影响任何其他情况:navController.addOnDestinationChangedListener{ _, destination, _ -> if(R.id.navigation_fragment_a == destination.id) {//在此处执行您的操作 } } - Rahul Rastogi

1
这是我的解决方案。
在A中,添加一个带有默认值为false的导航参数(在nav_graph.xml中)。
在B中,添加一个返回到A的导航。为了处理返回按钮按下事件,在onCreate()中添加以下内容。
requireActivity().onBackPressedDispatcher.addCallback {
        val action = BDirections.actionBFragmentAFragment(true)
        findNavController().navigate(action)
    }

现在你可以确定A的显示方式。同时,使用popUpTo来正确处理循环逻辑。如果您发现此方法存在任何缺陷,请告诉我。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接