我昨天开始使用 OTTO by Square,到目前为止我有一个好的开始。
当您的 Fragment 已经托管在 FragmentActivity 中并且您只需要在该 FragmentActivity 托管的 Fragment 之间进行通信时,Otto 开箱即用的效果很好。
当已经托管时,您的 #onResume() Methode 会被调用,并且 Fragment 可以在 Eventbus 上注册自己:
@Override
public void onResume()
{
super.onResume();
BusProvider.getInstance().register(this);
}
我的问题:
嵌入在额外Activity 中的 Fragment 应该通过 Eventbus 接收事件,如下所示:
public AnotherFragmentHostedInSomeActivity extends Fragment
{
.....
@Subscribe
public void onSomethingHappend(final Event event)
{
final SomeObject deliveredObject = event.getSomeObject();
但是,当您想在那里调用另一个托管类似以下代码的片段的活动时,看起来事情仍然很复杂:
public class SomeFragmentSendingDataToAnotherFragment extends Fragment
{
...
private void sendData()
{
final Intent intent = new Intent(applicationContext, SomeActivity.class);
applicationContext.startActivity(intent);
BusProvider.getInstance().post(new Event(someObject));
正如您可能已经看到的那样,这段代码很狡猾。由于生命周期,启动 Activity 然后将数据发送到该 Activity 托管的 Fragment 无法正常工作。因此,活动被创建,片段也被创建。有时会调用 onResume Methode,以便 Fragment 可以使用 @Subscribe 注册自己。但这一切都发生在事件已经通过 EventBus 发布之后。因此,感兴趣的片段永远不会被 EventBus 调用。
任何人都知道如何以聪明的方式做到这一点?
那里有一些额外的信息:昨天我和 OTTO 玩得很开心。只有当我需要将数据发送到另一个活动时,问题才会出现在我的项目中,在我的情况下,这种情况总是发生在应用程序在智能手机上运行时,而不是平板电脑上。在我通过 Intent 和 Parcelable 发送所有数据之前。Otto 会减少编写 Parcleable Objects 的需要,所以我想这样做。
感谢您的回答