两个片段永远不要直接通信

时间:2019-10-24 03:33:13

标签: java android android-fragments

我有活动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片段吗?

1 个答案:

答案 0 :(得分:0)

在您的情况下,考虑到这一点的一种方法是,利用某种东西来管理整个应用程序的状态,因为您被迫进行多种活动,但是您需要在它们之间进行某种沟通,AppManager将是解决此类问题的理想方法。

您将在应用启动时注入/启动AppManager,并将其绑定到Application类,我想将它作为Singleton也是理想的。

但是,我也很想提一下,但是如果您可以将Activity A和Activity B合并到一个Container Activity中,并使用Navigation Component进行AF和BF片段的转换,那么就可以使用共享视图模型在容器的整个活动中,将AF和BF片段分割成一个更好的方法,但是我知道您可能会受限于或受限于旧版代码。

最后一件事,可能是个人观点,但是让EventBus处理此类数据转换会违反应用程序中设置的所有体系结构规则或法律,您实际上会强制覆盖任何自上而下的方法来处理数据发布就像在应用程序中的任何地方发布一个正在侦听的事件一样简单,而不是像ViewModels那样,确实总是有范围被绑定。

希望这可以解决您的问题!