EventBus的简单使用

2019-06-19  本文已影响0人  townof1997

EventBus出现的原因在于解决UI的同步更新的问题,比如我的某个Activity界面需要显示上传的图片(比如头像),但是修改上传的头像时,进入上传头像页面,修改后,退出到显示页面,显示页面要及时更新,这就用到了同步的情况,这个时候就需要EventBus来操作;
代码及步骤如下:
1,在app.gradle的dependencies { }中加入implementation 'org.greenrobot:eventbus:3.0.0';

implementation 'org.greenrobot:eventbus:3.0.0'

2,创建bean类如下:

public class TextEvent {
    public String msg;
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public TextEvent(String msg) {
        this.msg = msg;
    }
}

可以不用set,get方法;
3,在使用EventBus的activity类的OnCreate方法中加入:EventBus.getDefault().register(this);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_event_bus3_msg);
        EventBus.getDefault().register(this);
    }

4,通过点击事件注册EventBus的post事件

public void getEventBusData(View view) {
        TextEvent event = new TextEvent("测试来自EventBus的数据");
        event.setMsg("EventBus");
        EventBus.getDefault().post(event);
    }

5,更新UI的代码如下:需要加入注解:@Subscribe(threadMode = ThreadMode.MAIN)(方法名可以随便命名)

    @Subscribe(threadMode = ThreadMode.MAIN)
    public void xx(TextEvent event) {//EventBus3.0.0可以随便取方法名,2.x版本需要onEvent//onDataSynEvent
        Toast.makeText(this, event.msg+"&&"+event.getMsg(), Toast.LENGTH_SHORT).show();
        // initUserInfo();更新UI的方法
        // 还可以进行网络请求比如更新UI的网络请求方法
        // UpdateUserInfo(final Context context)
    }

6,在销毁的方法里面加入EventBus.getDefault().unregister(this);

    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }
上一篇 下一篇

猜你喜欢

热点阅读