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(); }