這次項目中需要實作在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() ) ,一定放在它的後面,不然頁面也會接收不到參數。
我後來也是百度,一個網友說的,真心謝謝。
本文由 戰狼戶外 贊助提供。 更多了解,點選戰狼戶外。