2016-08-01 49 views
1

我使用SplashActivity将数据从允许的数据发送到主要活动使用EventBus'spostSticky方法,并根据该数据使用ViewPagerMainActivity中创建制表符。EventBus,是否有可能在onCreate中获得粘性事件?

到目前为止,它的工作很好,我可以在@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); 
} 

的问题是出现在我们称之为从ActivityCMainActivity

现在@Subscribe onEvent(Example data)不会被调用,因为我们是从SplashActivity张贴到它而已,所以它将不会被调用,并且ViewPager不会更新。

我想要什么:

我想从StickyPost数据尽早这样我就可以在活动的OnCreate方法初始化ViewPager

我知道我可以使用应用程序级Singleton或创建一个DataHolder类等来存储数据,但有无论如何要实现这一点使用EventBus

感谢您的时间,如果您需要更多的信息让我知道,我会更新。

+0

哪'EventBus'和'Subscribe'标注有那些?那些不是番石榴的,至少不是19.0 – fge

+0

对不起,[Greenbots EventBus](https://github.com/greenrobot/EventBus)我会添加链接到问题 – Max

+0

你在哪里注册公共汽车并从公共汽车注销('onResume'和'onPause'?) – nshmura

回答

2

问题的解决方案非常简单,我们可以很简单。我们称之为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); 
    } 
0

当你创建一个事件订阅者时,你必须注册它(当它被销毁时注销它)。作为国家在official documentation,当你与活动工作,你写:

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

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

如果你想使用一个单独订阅的事件,你必须初始化它的独特之处,比如应用程序类并将其注册在eventbus。

+0

很抱歉,您没有得到我的问题我认为,我正在执行您提到的所有步骤,能够从'SplashActivity'获取数据并创建制表符相应地,但是当'ActivityA'调用'MainActivity'时''onEvent'方法没有被调用,希望你得到了我的观点 – Max

相关问题