Eventbus事件订阅者

时间:2018-01-21 16:30:05

标签: java android greenrobot-eventbus

我在android中学习事件总线(http://greenrobot.org),我有以下代码

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        EventBus.getDefault().register(this);
        EventBus.getDefault().post(new Message("John Testing this event"));
    }



    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onMessageEventOne(Message message) {
        Log.d("ApiCall_1",message.getMessage());
        Toast.makeText(getApplicationContext(), message.getMessage(), Toast.LENGTH_SHORT).show();
    }

    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onMessageEventTwo(Message message) {
        Log.d("ApiCall_2",message.getMessage());
        Toast.makeText(getApplicationContext(), message.getMessage(), Toast.LENGTH_SHORT).show();
    }


    @Override
    public void onStart() {

        super.onStart();


    }

    @Override
    public void onStop() {

        EventBus.getDefault().unregister(this);
        super.onStop();

上述内容会触发订阅者onMessageEventOneonMessageEventtwo。所以我的问题是 1.有没有办法触发特定用户?。

2 个答案:

答案 0 :(得分:1)

使用EventBus,您正在订阅某个type的广播。如果您希望在同一活动中调用不同的函数,则需要广播不同的类型。

答案 1 :(得分:1)

我假设事件总线使用java pojo对象作为标识符,并且一次向所有已注册的接收者对象发送事件。

http://greenrobot.org/eventbus/documentation/how-to-get-started/

因此,定义2个pojo类,你必须改变:

EventBus.getDefault().post(new Message("John Testing this event"));

// Event type one
EventBus.getDefault().post(new MessageOne("John Testing this event"));

// Event type two
EventBus.getDefault().post(new MessageTwo("John Testing this event"));