Java EventBus,是否可以在onCreate中获取粘性事件?

Java EventBus,是否可以在onCreate中获取粘性事件?,java,android,greenrobot-eventbus,Java,Android,Greenrobot Eventbus,我使用postSticky方法将数据从(比如说SplashActivity发送到主活动,并根据该数据使用ViewPager在MainActivity中创建选项卡 到目前为止,它工作得很好,我可以在@Subscribe-onEvent(示例数据)方法中设置ViewPager 例如: @Subscribe(sticky = true, threadMode = ThreadMode.MAIN) public void onEvent(Example event){ mainContentLi

我使用
postSticky
方法将数据从(比如说
SplashActivity
发送到主活动,并根据该数据使用
ViewPager
MainActivity
中创建选项卡

到目前为止,它工作得很好,我可以在
@Subscribe-onEvent(示例数据)
方法中设置
ViewPager

例如:

@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onEvent(Example event){
    mainContentList = event.mainContentList;

    if (mViewPager != null) {
        setupViewPager(mViewPager, mainContentList);
    }

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(mViewPager);
}
当我们从
ActivityC

现在不会调用
@Subscribe-onEvent(示例数据)
,因为我们只从
SplashActivity
发布到它,所以不会调用它,并且不会更新
ViewPager

我想要的是:

我希望尽早从StickyPost获取数据,以便在活动的
OnCreate
方法中初始化
ViewPager

我知道我可以使用应用程序级单例或创建
数据持有者
类等来存储数据,但使用
事件总线
是否可以实现这一点


感谢您的时间,如果您需要更多信息,请告诉我,我将进行更新。

当您创建事件订阅服务器时,您必须注册它(并在它将被销毁时取消注册)。如中所述,当您使用活动时,您会编写:

 @Override public void onStart() {
     super.onStart();
     EventBus.getDefault().register(this); }

 @Override public void onStop() {   
 EventBus.getDefault().unregister(this);
     super.onStop(); }

如果你想使用单例订阅事件,你必须在一个唯一的点上初始化它,比如应用程序类,然后在eventbus上注册它。

这个问题的解决方案非常简单,我们可以很简单。我们可以在任何地方调用
getStickyEvent
,类似这样的东西

示例:

EventBus eventbus = Bus.getInstance();

ExampleEvent event = eventbus.getStickyEvent(ExampleEvent.class);

    if ( event != null ){

        // Whatever we want to do with event

        // and then we can remove stickyEvent if we don't need it anymore

        eventbus.removeStickyEvent(event);
    }

哪些是
EventBus
Subscribe
注释?这些不是Guava的,至少在19.0之前不是。对不起,我将添加问题的链接,您在哪里注册到巴士和从巴士上注销?(
onResume
onPause
?)@nshmura in
onStart
onStop
,但问题是,当我们从
SplashActivity
启动
MainActivity
时,它会工作,但当我们从
ActivityC
启动
MainActivity
时,当然不会调用
onEvent
,因此视图不会更新。如果ActivityC是透明的或其他原因,则不会调用
onStart
可能是。因此,我建议您检查是否调用了onStart,并在调用
onStart
时检查
EventBus
中是否存在stickyEvent。像这样
bus.getStickyEvent(Example.class)!=空
很抱歉,但是你没有理解我的问题,我想,我正在执行你提到的所有步骤,我能够从
SplashActivity
获取数据并相应地创建选项卡,但是当
MainActivity
ActivityC
调用
onEvent
方法时,希望你明白我的意思