注意:说两个坑
1.activity和Fragment通过eventbus通信,两个类必须都regist和unregist,unregist最好放到onpause方法中,要不容易出异常。
2.两个类中必须有最少一个接受方法,如果一个也没有也容易出异常。
- 首先在gradle(app)中添加依赖
compile 'org.greenrobot:eventbus:3.0.0'
- 实例说明:
MainActivity中有两个fragment
1.点击fragment1中的按钮后,跳转到fragment2,这个过程由fragment1给MainActivity发消息处理,完成fragment和Activity之间的通信
2.点击fragment2中的按钮,跳转回fragment1,并将fragment2中的信息告诉fragment1。这个过程包括fragment2给MainActivity发消息做跳转,fragment2给fragment1发消息实体。完成fragment和Activity之间、fragment2和fragment1之间的通信。
看下效果
1.MainACtivity
MainActivity中注册和取消注册代码
@Override
protected void onResume() {
super.onResume();
EventBus.getDefault().register(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
MainActivity中接收fragment发送的消息
@Subscribe(threadMode = ThreadMode.MAIN)
public void FragmentButtonClicked(String str) {
switch (str) {
case "fragment1":
Toast.makeText(getApplicationContext(), "fragment1点击", Toast.LENGTH_LONG).show();
initFragmentSelected(1);//展示fragment2界面
break;
case "fragment2":
Toast.makeText(getApplicationContext(), "fragment2点击", Toast.LENGTH_LONG).show();
initFragmentSelected(0);//展示fragment1界面
break;
default:
break;
}
2.fragment1
fragment1中注册和取消注册的代码,旨在接收fragment2发送的消息
@Override
public void onResume() {
super.onResume();
EventBus.getDefault().register(this);
}
@Override
public void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
点击fragment1中的按钮点击,告诉MainActivity展示fragment2界面
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.tv1:
EventBus.getDefault().post("fragment1");//告诉MainActivity,fragment1中的按钮点击了
break;
}
}
fragment1中处理fragment2发送消息的代码
@Subscribe(threadMode = ThreadMode.MAIN)
public void Fragment2ButtonClicked(MsgToSend msgToSend) {
mTv1.setText("我是fragment111111111 后面的信息是fragment2返回的数据:"+msgToSend.getMessage());
}
3.fragment2
fragment2中的按钮点击后,发送了两个消息,一个是告诉MainActivity切换fragment1界面的消息,一个是将实体MsgToSend告诉fragment1的消息
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.tv2:
EventBus.getDefault().post("fragment2");
EventBus.getDefault().post(new MsgToSend("我是fragment2,我给你发个信息"));
break;
}
}
这就是通过eventBus实现Activity和fragment通信、fragment和fragment通信的小例子,特别的简单,给eventBus点个赞