EventBus,是否可以在onCreate中获取粘性事件?
EventBus, is it possible to get the sticky event in the onCreate?
我正在使用 EventBus's postSticky
方法将数据从假设 SplashActivity
发送到主 activity,并根据该数据在 [=13= 中创建选项卡] 使用 ViewPager
.
到目前为止效果很好,我可以在 @Subscribe onEvent(Example data)
方法中设置 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
、
调用 MainActivity
时出现问题
现在 @Subscribe onEvent(Example data)
不会被调用,因为我们只从 SplashActivity
向它发帖,所以它不会被调用,ViewPager
也不会得到更新。
What I want:
我想尽早从 StickyPost 获取数据,这样我就可以在 activity 的 OnCreate
方法中初始化 ViewPager
。
我知道我可以使用应用程序级别的 Singleton 或创建一个 DataHolder
class 等来存储数据,但是无论如何可以使用 EventBus
来实现吗?
感谢您抽出时间,如果您需要更多信息,请告诉我,我会更新。
当你创建一个事件订阅者时,你必须注册它(当它被销毁时取消注册)。正如 official documentation 中的状态,当您使用 activity 时,您会写:
@Override public void onStart() {
super.onStart();
EventBus.getDefault().register(this); }
@Override public void onStop() {
EventBus.getDefault().unregister(this);
super.onStop(); }
如果你想使用单例订阅事件,你必须在唯一点初始化它,比如应用程序class并注册到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's postSticky
方法将数据从假设 SplashActivity
发送到主 activity,并根据该数据在 [=13= 中创建选项卡] 使用 ViewPager
.
到目前为止效果很好,我可以在 @Subscribe onEvent(Example data)
方法中设置 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
、
MainActivity
时出现问题
现在 @Subscribe onEvent(Example data)
不会被调用,因为我们只从 SplashActivity
向它发帖,所以它不会被调用,ViewPager
也不会得到更新。
What I want:
我想尽早从 StickyPost 获取数据,这样我就可以在 activity 的 OnCreate
方法中初始化 ViewPager
。
我知道我可以使用应用程序级别的 Singleton 或创建一个 DataHolder
class 等来存储数据,但是无论如何可以使用 EventBus
来实现吗?
感谢您抽出时间,如果您需要更多信息,请告诉我,我会更新。
当你创建一个事件订阅者时,你必须注册它(当它被销毁时取消注册)。正如 official documentation 中的状态,当您使用 activity 时,您会写:
@Override public void onStart() {
super.onStart();
EventBus.getDefault().register(this); }
@Override public void onStop() {
EventBus.getDefault().unregister(this);
super.onStop(); }
如果你想使用单例订阅事件,你必须在唯一点初始化它,比如应用程序class并注册到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);
}