greenrobot EventBus 使用实践

来源:互联网 发布:php 获取根目录 编辑:程序博客网 时间:2024/06/02 01:28
第一步:在build.gradle加入
compile 'org.greenrobot:eventbus:3.0.0'

然后重新编译工程:注意如果正式使用时,提示找不到EventBus则使用以下处理办法:

没有效果,添加依赖失败,没有一点反应,后来看stackoverflow 说,在allprojects的repositories下面加入 “mavenCentral()”
先开始也是没有效果,后来,重启了Android,然后就可以了,之前好多遍rebuild都不管用

第二步:定义消息类

public class MessageEvent { public int pos;    public String cityId;    public MessageEvent(int pos , String cityId) {        this.pos = pos;//用于标记是发给哪个接收者的,如果同一个消息有多个接收者        this.cityId = cityId;    }}

第三步:编写发送消息的代码

比如点击按键,然后发送消息,或者,其他库的回调函数发送此消息,上面的类的定义可以和发消息的类定义到同一个文件里面

EventBus.getDefault().post(new MessageEvent(1,“id”);
第四步:编写接收者部分(接收者和发送者都可以是任意线程,任意activity,fragment

// MessageEvent被当做参数发送的时候这个方法将会被触发.@Subscribe(threadMode = ThreadMode.MAIN) //表示消息接收函数运行在ui线程,即可以直接操作界面显示public void onMessageEvent(MainActivity.MessageEvent event) {    //Toast.makeText(getActivity(), "from fragment: "+event.pos, Toast.LENGTH_SHORT).show(); if (indexOfFragment == event.pos) { // the current page is been selected//当有多个接收者用编号区分是否发给自己的消息        System.out.println("the current page is been selected page is "+ event.pos);        //only do this on current page        //todo send update ui msg    }}
第五步:注册接受者

在这之上知识准备好接收者,但是还没有注册到eventbus,因此还不会收到消息

在接收函数所在的类里面,注册接收者,比如在Fragmet或activity里面

@Overridepublic void onPause() {    super.onPause();    EventBus.getDefault().unregister(this);    System.out.println("fragment ::::: un register"+this);}@Overridepublic void onResume() {    super.onResume();    EventBus.getDefault().register(this);    System.out.println("fragment ::::: register address:" + this);}
这里注意不要在onStart和onStop里面做,具体原因没有分析,但是使用onStart和onStop在使用时会出现,接收到消息,ui不更新的现象(接收者在fragment里面)


阅读全文
0 0