我正在使用导航控制器组件。假设我有4个片段
A-> B-> C或D
从片段A开始,它只能转到片段B。但是,如果我们在片段B中,则可以转到片段C或片段D。
如果它来自片段A,我想在onResume片段B中执行方法workXYZ()
,如果我来自片段C或片段D,我想在onResume片段B中执行方法doSomethingABC()
。 / p>
从片段A到片段B,我使用以下代码:
val BDestination = FragmentADirections.actionToFragmentB()
Navigation.findNavController(fragmentView).navigate(BDestination)
要到达片段C和片段B中的片段D,我使用了全局操作。因为片段C和D实际上不仅由片段B使用,所以我使用下面的代码进入片段C或D
val CDestination = BFragmentDirections.actionGlobalFragment()
Navigation.findNavController(fragmentView).navigate(CDestination)
然后从片段C或片段D中,使用“后退”按钮回到片段B。
我试图在导航图中使用安全参数boolean comesFromFragmentA
= true,以便给出片段B紧随片段A之后的信号。但是不幸的是,安全参数boolean comesFromFragmentA
的值将如果来自片段C或D,则保持相同(真)。
那么,如果想知道片段B是出现在前一个片段之后还是之后,该怎么办?
答案 0 :(得分:2)
片段参数是可变的,因此您可以随时更改它们。因此,您可以在导航以表示将来的onResume()
调用将在返回该片段之后立即更新该参数值:
// Set the comesFromFragmentA argument to signify that the next onResume()
// will be when you come back to this Fragment
arguments.putBoolean("comesFromFragmentA", false)
// Now navigate
val CDestination = BFragmentDirections.actionGlobalFragment()
Navigation.findNavController(fragmentView).navigate(CDestination)