java - 两个片段不应该直接通信
问题描述
我有活动 A 和 B。A有片段AF,B有BF。
从 AF 我导航到片段 BF,如下所示:
Intent i = new Intent(getActivity(), B.class);
startActivityForResult(i, B.REQUEST_CODE);
从 B 活动中,我正在加载 BF 片段,如下所示:
BF bf = new BF();
bf.init(this);
getSupportFragmentManager().beginTransaction()
.add(R.id.bfFragmentHolder,bf)
.commitAllowingStateLoss();
完成 BF 片段中的工作后,我通过带有一些数据对象的接口将一些数据传递给 B 活动,然后返回到 A 活动的 AF 片段,如下所示:
Intent intent = new Intent();
setResult(RESULT_OK, intent);
finish();
之后,AF 片段onStart()
被调用。
我的问题是如何将数据传递给 BF 到 AF 片段?我知道它建议不要直接交流。但是我怎样才能在那里发送数据?我应该使用 Intent 将数据传递给 A 活动,然后将其传递给 AF 片段吗?
解决方案
在您的情况下,考虑这一点的一种方法是使用管理整个应用程序状态的东西,因为您被迫有多个活动,但是您需要在它们之间建立某种通信方式,AppManager 会是解决此类问题的理想方法。
您将在您的应用启动时注入/启动 AppManager,并将其绑定到您的 Application 类,我想将它作为 Singleton 也是理想的。
但是,我也很想提及这一点,但是如果您可以将 Activity A 和 Activity B 组合成一个容器 Activity,并使用 Navigation Component 使 Fragment AF 和 BF 转换,那么就有一个跨容器的共享视图模型活动,片段 AF 和 BF,这将是一种更好的方式,但我知道您可能会受到限制或紧张于遗留代码。
最后一件事,这可能是个人意见,但是让 EventBus 处理此类数据转换,将违反您的应用程序中设置的所有架构规则或法律,您实际上强制覆盖任何自上而下的方法来处理数据就像在应用程序的任何地方发布一个正在监听的事件一样简单,不像 ViewModel 那样总是有一个被绑定的范围。
希望这可以解决您的问题!
推荐阅读
- java - JavaFX 需要增量和减量才能在列中显示
- http - 我将如何制作类似于 http/https 的自己的应用程序协议?
- reactjs - 为使用 ConnectedRouter 制作的 React.JS 应用程序的 SSR 正确初始化服务器上的商店
- javascript - 如何在 Typescript 中使用 use-supercluster
- php - 在帖子中获取标签 ID
- java - 带有@Query的Java Spring elasticsearch“无法派生xcontent”
- php - 过滤键/值对的集合。如何访问密钥?
- deep-learning - 如何保存从此代码中分离的生成图像
- microservices - 像 Nestjs 微服务一样招摇
- c++ - 尝试将水平滑块连接到 Qt 中的 LCD 数字和进度条时出现问题