在我目前正在开发的应用程序中,我遇到了有关 Activity 之间通信的问题。
基本上我有一个 UI 组件,它类似于 Combobox
。但是,此组件的可能值列表必须在新的 Activity
中开放。
因此,当您单击该组件时,将使用 startActivityForResult
打开一个新的 Activity
。
当您选择新值时,它会被放入 Bundle
中并返回到之前的 Activity
。然后,我需要使用 onActivityResult
方法获取所选值并将其设置到组件。
这意味着,每个使用此组件的 Activity
都需要覆盖 onActivityResult
并使用新值刷新组件。
相反,我想要的是,该组件负责所有这些事情,您只需注册一个 Listener
,就像您为 TextView
和类似组件所做的那样。
但目前我找不到一个好的方法来做到这一点,因为通信与 Activity
紧密绑定(bind),我只是无法获得 Activity的结果
。onActivityResult
之外的
有谁知道这个问题的好的解决方案吗?
最佳答案
对此的解决方案 - 使用 EventBus
并在其上发布粘性事件。通过这样做,您不必覆盖 onActivityResult
。
工作流程如下:
- 使用您的数据创建事件对象
- 从总线中删除所有相同类型的粘性事件
- 通过 .sendSticky()
方法发布新值。
该事件将一直存在,直到有东西将其从总线上移除
- 开始另一项 Activity
- 在此 Activity 覆盖方法中,订阅该事件类型,其中:
a) 用你的论点接受和处理事件
b) 将其从总线上移除
- 在 onResume()
方法中订阅总线(第二个 Activity)
- 在 .onPause()
方法中取消订阅总线
重点是,这允许您无缝处理第二个 Activity 的生命周期,并且您可以订阅/取消订阅基类中的总线
关于java - 没有 onActivityResult 的 Activity 之间的 Android 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40714705/