我昨天开始使用Square的OTTO,到目前为止我有一个良好的开端。
当您的片段已经托管在FragmentActivity中,并且您只需要在由该FragmentActivity托管的Fragment之间进行通信时,Otto可以很好地运作。
当已经托管时,您的#onResume()方法将被调用,Fragment可以在Eventbus上注册自己。
正如你可能已经看到的那样,这段代码有点不可靠。启动一个Activity,然后向该Activity托管的Fragment发送数据是行不通的,因为生命周期的原因。所以Activity被创建,Fragments也被创建。在某个时候,onResume方法被调用,因此Fragment可以使用@Subscribe注册自己。但是所有这些都发生在事件已经通过EventBus发布之后。因此,感兴趣的Fragment永远不会被EventBus调用。
有人知道如何以聪明的方式解决这个问题吗?
一些额外的信息: 昨天我尝试了OTTO。这个问题只在我的项目中出现,当我需要将数据发送到另一个Activity时,这在我的情况下总是发生在智能手机上运行应用程序时,而不是平板电脑上。在我使用Intent和Parcelable发送所有数据之前,Otto可以减少编写Parcelable对象的需求,因此我想走这条路。
感谢答案
当您的片段已经托管在FragmentActivity中,并且您只需要在由该FragmentActivity托管的Fragment之间进行通信时,Otto可以很好地运作。
当已经托管时,您的#onResume()方法将被调用,Fragment可以在Eventbus上注册自己。
@Override
public void onResume()
{
super.onResume();
BusProvider.getInstance().register(this);
}
我的问题:
片段嵌入了一个额外的活动,该活动应通过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发送数据是行不通的,因为生命周期的原因。所以Activity被创建,Fragments也被创建。在某个时候,onResume方法被调用,因此Fragment可以使用@Subscribe注册自己。但是所有这些都发生在事件已经通过EventBus发布之后。因此,感兴趣的Fragment永远不会被EventBus调用。
有人知道如何以聪明的方式解决这个问题吗?
一些额外的信息: 昨天我尝试了OTTO。这个问题只在我的项目中出现,当我需要将数据发送到另一个Activity时,这在我的情况下总是发生在智能手机上运行应用程序时,而不是平板电脑上。在我使用Intent和Parcelable发送所有数据之前,Otto可以减少编写Parcelable对象的需求,因此我想走这条路。
感谢答案