android - 如何使用Android中的导航控制器组件检测片段是来自前一个片段还是来自之后的片段?
问题描述
我正在使用导航控制器组件。假设我有 4 个片段
A --> B --> C 或 D
从片段A,它只能到片段B。但如果我们在片段B,它可以去片段C或片段D。
workXYZ()
如果它来自片段 A,我想在 onResume 片段 B 中执行方法,doSomethingABC()
如果它来自片段 C 或片段 D ,我想在 onResume 片段 B 中执行方法。
从片段 A 到片段 BI 使用以下代码:
val BDestination = FragmentADirections.actionToFragmentB()
Navigation.findNavController(fragmentView).navigate(BDestination)
为了从片段 B 到达片段 C 和片段 D,我使用全局操作。因为片段 C 和 D 实际上不仅由片段 B 使用。所以我使用下面的代码转到片段 C 或 D
val CDestination = BFragmentDirections.actionGlobalFragment()
Navigation.findNavController(fragmentView).navigate(CDestination)
从片段 C 或片段 D,我使用后退按钮返回片段 B。
我试图comesFromFragmentA
在导航图中使用安全参数 boolean = true 以表明片段 B 在片段 A 之后。但不幸的是,如果安全参数 booleancomesFromFragmentA
来自片段 C 或D.
那么如果想知道片段B是出现在前一个片段之后还是之后出现的片段,我该怎么办?
解决方案
片段参数是可变的,因此您可以随时更改它们。因此,您可以在导航之前更新该参数值,以表示将来的onResume()
调用将在您返回此 Fragment 之后进行:
// 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)
推荐阅读
- java - 找不到符号 [ERROR] 符号:方法 getlogger(java.lang.Class
) - sql - SAP HANA -count(*) 给出不同的输出
- c# - 如何使用 ASP.NET 和 C# 在 Gridview 中实现批量保存
- javascript - 如何使用 Jest 和 Enzyme 测试具有 Router、Redux 和两个 HOC 的 React 组件?
- javascript - Node.js child_process TypeError:无法读取未定义的属性“_writableState”
- php - 使用 array_intersect 检查数组中的多个值
- python - 错误:TensorFlow:tf.enable_eager_execution 必须在程序启动时调用
- php - 自定义 Dreamweaver“'字段'不能为空”错误
- aws-lambda - 从 AWS java SDK 调用 AWS Lambda 函数
- java - 对多个键具有相同值并可按单个键搜索的数据结构