Android/Kotlin 替换 EventBus postSticky()

Android/Kotlin replacement for EventBus postSticky()

我正在寻找 postSticky() 方法替换。它被用于简单地将值传递给前一个片段,但问题是我正在使用 BackStackUtil 进行导航,因此只有在返回之前堆栈以某种方式被清除时返回时才会调用 instance() 方法。

前一个片段持有 List 个项目,当下一个片段可以修改选择的项目而另一个片段可以做其他事情时,当每个片段都被传递到前一个片段时,它是一连串的粘性事件。
App 结构不允许我在当前阶段应用 Coordinator 模式,而且我不想将 Bundle 附加到保存在堆栈中的 Fragments。

我一直在寻找解决方案,但找不到任何解决方案。我也不想在某些静态字段或 SharedPreferences/Data 存储中存储值。
我在考虑共享 ViewModel 但老实说我不太喜欢这个想法,所以我会很感激任何想法或只是确认共享 VM 是否是 only/best 方式。

您还有其他想法吗?

在您的 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 中的类型),但您可以使用任何类型。