这次项目中需要实现在fragment中选择参数,然后在其他fragment和activty页面中接收参数,获取参数后,修改页面标题背景色。使用到event3.0粘性事件poststicky
本文由战狼户外 (个人小网站)赞助提供。 作者 战狼户外
之前使用了eventbus2.4,感觉蛮好用的,使用post方法, 遇到了问题:我在fragment中选择listview条目的某个选项,在其他 fragment中可以获取参数,但是其他activity页面居然获取不到。后来在百度查了好多,有网友 说是 eventbus3.0新版本的poststicky就是专门解决这个问题的。
为什么出现这个问题呢?
当前选择的fragment与 接收的其他fragment 同属于一个activity,页面加载时候, 接收的fragment已经注册接收eventbus事件,所以后面的fragment才能接收到。接收的activity页面没有初始化,等于就没有注册接收eventbus事件,所以就出现遇到的问题;
eventbus 原理: 先注册接收事件,才能接收别人发送的 postevent。
poststicky 作用:只指事件消费者在事件发布之后才注册的也能接收到该事件的特殊类型。
实现以下功能:在fragment页面点击列表条目选择类型,在注册Activity页面修改背景色。
效果图:
选择列表不同条目类型(fragment发送事件)
注册页面标题栏背景修改(activity页面接收事件并处理)
注册页面标题栏背景修改(activity页面接收事件并处理)
实现代码部分“
第一步: fragment发送事件,
// 登录页面顶部标题栏背景修改通知
EventBus.getDefault().postSticky(newEventBusMessage(color));
第二步: Activity页面接收
// 在oncreate()方法中注册eventbus
EventBus.getDefault().register(this);
// 接收事件方法
@Subscribe(threadMode= ThreadMode.MAIN,sticky=true)
public voidreceiveMessage(EventBusMessage event) {
// 修改当前页面的标题栏背景色
title_bar.setBackgroundColor(Color.parseColor(event.Message));
}
// 在 onDestroy() 中解除注册eventbus
EventBus.getDefault().unregister(this);
注意点:( 千万记住)
EventBus.getDefault().register(this); 这句话一定不要放在 初始化组件之前
(例如: findViewById() ) ,一定放在它的后面,不然页面也会接收不到参数。
我后来也是百度,一个网友说的,真心谢谢。
本文由 战狼户外 赞助提供。 更多了解,点击战狼户外。