java - 没有 onActivityResult 的 Activity 之间的 Android 通信

标签 java android android-intent android-activity

在我目前正在开发的应用程序中,我遇到了有关 Activity 之间通信的问题。
基本上我有一个 UI 组件,它类似于 Combobox。但是,此组件的可能值列表必须在新的 Activity 中开放。
因此,当您单击该组件时,将使用 startActivityForResult 打开一个新的 Activity
当您选择新值时,它会被放入 Bundle 中并返回到之前的 Activity。然后,我需要使用 onActivityResult 方法获取所选值并将其设置到组件。
这意味着,每个使用此组件的 Activity 都需要覆盖 onActivityResult 并使用新值刷新组件。
相反,我想要的是,该组件负责所有这些事情,您只需注册一个 Listener,就像您为 TextView 和类似组件所做的那样。
但目前我找不到一个好的方法来做到这一点,因为通信与 Activity 紧密绑定(bind),我只是无法获得 ActivityonActivityResult 之外的。
有谁知道这个问题的好的解决方案吗?

最佳答案

对此的解决方案 - 使用 EventBus 并在其上发布粘性事件。通过这样做,您不必覆盖 onActivityResult

工作流程如下: - 使用您的数据创建事件对象 - 从总线中删除所有相同类型的粘性事件 - 通过 .sendSticky() 方法发布新值。

该事件将一直存在,直到有东西将其从总线上移除 - 开始另一项 Activity - 在此 Activity 覆盖方法中,订阅该事件类型,其中: a) 用你的论点接受和处理事件 b) 将其从总线上移除 - 在 onResume() 方法中订阅总线(第二个 Activity) - 在 .onPause() 方法中取消订阅总线

重点是,这允许您无缝处理第二个 Activity 的生命周期,并且您可以订阅/取消订阅基类中的总线

关于java - 没有 onActivityResult 的 Activity 之间的 Android 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40714705/

相关文章:

java - 有限状态机程序

java - 如何在android中的共享首选项中使用主键?

java - 如何从重新排序到前面的 Activity 运行特定功能

java - 使用 jetty-runner 提供网络共享目录

java - 如何获取 JTextField 的真实 x 和 y 坐标

java - JFileChooser 不会死?

java - Android 在 Carousel CoverFlow (moondroid) 中停止无限循环/重复

android - 直接在 flutter 项目中使用插件,无需分离到另一个包或在 pubspec.yaml 中添加插件字段

java - 如何在 Android Intent 过滤器中执行否定匹配?

android - 找不到处理 Intent { act=android.media.action.IMAGE_CAPTURE } 的 Activity