您的位置:首页 > 移动开发 > Android开发

Eventbus 详解,Activity和fragment通讯,相互发送接收数据

2015-10-16 18:08 561 查看
最近,需要做fragment与activity的交互,但是,又不想使用回调接口,所以想到了EventBus.

大致了解了一下其主要介绍为:

一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。

附:EventBus在github上源码:https://github.com/greenrobot/EventBus

言归正传,在程序中,Fragment与Activity交互无非已下几种:



其实,EventBus使用起来十分简单,大体为已下几步:

(1)自定义一个类,可以是空类,如下。当然可以是空类,一般不会,应用中总要传点什么数据吧,是吧。

public class EventUtil {
private String msg;

public EventUtil(String msg) {
this.msg = msg;
}

public String getMsg(){
return this.msg;
}
}


(2)在要接收消息的页面注册:Fragment和Activity在OnCreate()方法中。

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

EventBus.getDefault().register(this);  //注册
}


(3)在要接收消息的页面注册解除注册:Fragment和Activity在onDestroy()方法中。

@Override
public void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);//取消注册
}


(4)在接受消息的页面实现四个接收函数中的任意一个,可多选。

// 接收函数一
public  void onEvent(EventUtil event){
String msglog = "----onEvent收到了消息:"+event.getMsg();
Log.d("hml",msglog);
bt1_activity1.setText(bt1_activity1.getText().toString()+"\n"+msglog);
}
// 接收函数二
public void onEventBackgroundThread(EventUtil event){
String msglog = "----onEventBackground收到了消息:"+event.getMsg();
Log.d("hml",msglog);
bt1_activity1.setText(bt1_activity1.getText().toString()+"\n"+msglog);
}
// 接收函数三
public void onEventAsync(EventUtil event){
String msglog = "----onEventAsync收到了消息:"+event.getMsg();
Log.d("hml",msglog);
bt1_activity1.setText(bt1_activity1.getText().toString()+"\n"+msglog);
}
// 接收函数四
public  void onEventMainThread(EventUtil event) {
String msglog = "----onEventMainThread收到了消息:"+event.getMsg();
Log.d("hml",msglog);
bt1_activity1.setText(bt1_activity1.getText().toString()+"\n"+msglog);
}


(5)在发送消息的页面,调用发送消息代码。一般在点击事件中

bt1_activity2.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
EventBus.getDefault().post(new EventUtil("activity2发送消息"));
}
});


如果你已经这样添加完,就可以随意接收任何界面发送的消息,也可以在任何界面发送消息。得到效果了吗。哈哈,相比聪明的你已经成功了。

上几张我的gif图片,源码在最后贴上。









混淆代码加上如下即可:

-keepclassmembers class ** {
public void onEvent*(**);
void onEvent*(**);
}


源码在此,快来领取吧。

有不懂的,给老夫留言。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android