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

时间:2016-08-01 11:48:43

标签: java android greenrobot-eventbus

我使用EventBus's SplashActivity方法将来自postSticky的数据发送到主要活动,并根据该数据使用MainActivityViewPager创建标签}。

到目前为止它效果很好,我可以在ViewPager方法中设置@Subscribe onEvent(Example data)

例如:

@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);
}

当我们从MainActivity致电ActivityC

时会出现此问题

现在不会调用@Subscribe onEvent(Example data),因为我们只是从SplashActivity发布到ViewPager,因此不会调用它,ViewPager也不会更新。

  

我想要的是什么:

我想尽早从StickyPost获取数据,因此我可以在活动的OnCreate方法中初始化DataHolder

我知道我可以使用应用程序级别Singleton或创建一个EventBus类等来存储数据但是无论如何使用<?php mysqli_connect("host", "username", "password", "dbname"); if (isset($_POST['button'])) { mysqli_query("SELECT name,lastname FROM users ORDER BY RAND()"); $name = null; $lastname = null; while ($row = mysqli_fetch_array()) { $name = $row['name']; $lastname = $row['lastname']; } echo '<p><small>Output:</small></p><pre style="min-width:auto;display:table;">' . $name . '_' . $lastname . '</pre>Format: <b>name_lastname</b> <span style="width:310px;">'; } ?> <form method="POST"> <button type="submit" class="btn btn-default" name="button">button</button> <br> </form> 来实现这一点?

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

2 个答案:

答案 0 :(得分:6)

问题的解决方案非常简单,我们可以简单。我们在任何地方调用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);
    }

答案 1 :(得分:0)

创建事件订阅者时,必须注册它(并在销毁时取消注册)。作为official documentation中的状态,当您使用您编写的活动时:

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

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

如果你想使用单例来订阅事件,你必须在一个独特的点上初始化它,比如应用程序类,并在事件总线上注册它。