我在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();
上述内容会触发订阅者onMessageEventOne
和onMessageEventtwo
。所以我的问题是
1.有没有办法触发特定用户?。
答案 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"));