android有了eventbus,一切与关界面通信问题迎刃而解。
16lz
2021-01-26
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;
@Overrideprotected void onDestroy() { EventBus.getDefault().unregister(this); super.onDestroy();}
更多相关文章
- SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
- Android(安卓)WebView 与 原生的交互
- Android(安卓)四种异步操作UI界面的方法
- Android(安卓)Root方法原理解析及Hook(四) GingerBreak
- Android在非UI线程中更新UI的方法
- Android中从网络获取数据的方法
- Android(安卓)Cocos2d-x游戏集成友盟社会化组件分享功能
- 【移动开发】Android游戏开发SurfaceView应用----手指发动小球(小
- android 日记log保存到本地简单方法