2016-08-01 71 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

相關問題