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 inonStart
和onStop
,但问题是,当我们从SplashActivity
启动MainActivity
时,它会工作,但当我们从ActivityC
启动MainActivity
时,当然不会调用onEvent
,因此视图不会更新。如果ActivityC是透明的或其他原因,则不会调用onStart
可能是。因此,我建议您检查是否调用了onStart,并在调用onStart
时检查EventBus
中是否存在stickyEvent。像这样bus.getStickyEvent(Example.class)!=空
很抱歉,但是你没有理解我的问题,我想,我正在执行你提到的所有步骤,我能够从SplashActivity
获取数据并相应地创建选项卡,但是当MainActivity
从ActivityC
调用onEvent
方法时,希望你明白我的意思