我有活动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合并到一个Container Activity中,并使用Navigation Component进行片段AF和BF的过渡,那么可以在整个容器中使用共享视图模型活动,将AF和BF片段化,这将是更好的方法,但是我知道您可能会受限于或紧守旧代码。

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

希望这能解决您的问题!

10-08 07:08