android有了eventbus,一切与关界面通信问题迎刃而解。

EventBus可以代替Android传统的Intent,Handler,Broadcast或接口函数,在Fragment,Activity,Service线程之间传递数据,执行方法,是依据观察者设计模式设计的;

在工程目录下的build.gradle 下添加依赖:

compile 'org.greenrobot:eventbus:3.0.0'
然后在你需要传播数据源的地方写上:

PayConfirmEvent payConfirmEvent = new PayConfirmEvent();
payConfirmEvent.setAddressBean(mAddressBeanList.get(position));
EventBus.getDefault().post(payConfirmEvent);
event模型要记住针对自己的数据去封装

然后接受方的代码:

在create方法中注册

EventBus.getDefault().register(this);
当然如果是一般类可以在你特定的方法中这样注册

if (!EventBus.getDefault().isRegistered(this)) {
    EventBus.getDefault().register(this);
}
这样就可以避免注册多次

覆写onEvent方法;框架会通过注解和反射拿到

payConfirmEvent
然后就可以在指定的ui线程刷新ui了,是不是超级方便啊,记得一定要记得最后取消注册额

@Subscribe(threadMode = ThreadMode.MAIN)
public void onEvent(PayConfirmEvent payConfirmEvent) {
    AddressBean addressBean = payConfirmEvent.getAddressBean();
    int pickUpStatel = payConfirmEvent.getPickUpStatel();
    if (addressBean != null) {
        tvReceiver.setText(addressBean.getUname());
        tvReceiverContact.setText(addressBean.getContact_way());
        tvReceiverAddress.setText(mHelper.code_getProvice(m_Db, String.valueOf(addressBean.getProvince())) +
                mHelper.code_getCity(m_Db, String.valueOf(addressBean.getCity())) +
                mHelper.code_getDistrict(m_Db, String.valueOf(addressBean.getArea())) + addressBean.getWhere());
        llHasAddress.setVisibility(View.VISIBLE);
        tvNoAddress.setVisibility(View.GONE);
        hasAddress = true;



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

你可能感兴趣的:(android有了eventbus,一切与关界面通信问题迎刃而解。)