android - EventBus postSticky() 的 Android/Kotlin 替代品
问题描述
我正在寻找postSticky()
方法替换。它被用于简单地将值传递给前一个片段,但事情是我使用 BackStackUtil 进行导航,因此instance()
只有在返回之前以某种方式清除堆栈时才调用方法。
前一个 Fragment 持有List
项目,当下一个 Fragment 可以修改拾取的项目而另一个 Fragment 可以做其他事情时,当每个 Fragment 都被传递给前一个 Fragment 时,它是一个粘性事件链。
应用程序结构不允许我在当前阶段应用 Coordinator 模式,而且我不想将 Bundle 附加到堆栈上的 Fragments。
我一直在寻找解决方案,但找不到任何解决方案。我也不想将值存储在某些静态字段或 SharedPreferences/Data 存储中。
我正在考虑共享 ViewModel,但老实说我不太喜欢这个想法,所以如果共享 VM 是唯一/最好的方式,我将不胜感激任何想法或只是确认。
你还有其他建议吗?
解决方案
在您的 A 片段中,在导航到 B 片段之前,请收听 savedStateHandle:
findNavController()
.currentBackStackEntry
?.savedStateHandle?.getLiveData<Bundle>("DATA_KEY")
?.observe(viewLifecycleOwner) { result ->
// Result from fragment B
}
在您的 B 片段中,在返回之前,将数据设置为传递给 A 片段:
findNavController()
.previousBackStackEntry
?.savedStateHandle
?.set("DATA_KEY", result)
您可以使用以下方法删除观察者:
findNavController()
.currentBackStackEntry
?.savedStateHandle?.remove<Bundle>
请注意,此处传递的类型是Bundle(getLiveData<Bundle> 中的类型),但您可以使用任何您想要的类型。
推荐阅读
- python - Python:ValueError: scatter 需要 y 列为数字?
- java - 获取 org.apache.maven.plugins:maven-jar-plugin:2.3.2 或其依赖项之一无法解决错误
- c - 以某些数字打印数字
- python - “break”会杀死一个运行while循环的线程吗?
- python - 使用多列的 Pandas groupby 函数
- python-3.x - flask-sqlalchemy db.Model._decl_class_registry.values() 和 db.metadata.tables 不一致
- libgdx - libgdx 音乐兼容性
- mysql - 如何将同一张表中的 SUM() 和 COUNT() 表更新到不同的列
- python - Order by 有时在我的查询中不起作用
- sharpdx - 我找不到为什么在 SharpDX 中没有释放内存