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)自定义一个类,可以是空类,如下。当然可以是空类,一般不会,应用中总要传点什么数据吧,是吧。
(2)在要接收消息的页面注册:Fragment和Activity在OnCreate()方法中。
(3)在要接收消息的页面注册解除注册:Fragment和Activity在onDestroy()方法中。
(4)在接受消息的页面实现四个接收函数中的任意一个,可多选。
(5)在发送消息的页面,调用发送消息代码。一般在点击事件中
如果你已经这样添加完,就可以随意接收任何界面发送的消息,也可以在任何界面发送消息。得到效果了吗。哈哈,相比聪明的你已经成功了。
上几张我的gif图片,源码在最后贴上。
混淆代码加上如下即可:
源码在此,快来领取吧。
有不懂的,给老夫留言。
大致了解了一下其主要介绍为:
一款针对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*(**); }
源码在此,快来领取吧。
有不懂的,给老夫留言。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories