天天看點

activity,fragment和fragment之前的資料傳遞

Fragment 使用頻率越來越高,碎片化也越來越嚴重。這就導緻了難免出現 Activity 和 Fragment ,Fragment 和 Fragment 出現通信。

Activity -> Fragment:

1. 緩存 Fragment 執行個體

2. 通過 FragmentManager

3. 通過 EventBus

4. 廣播

...

Fragment -> Activity:

1. 通過接口

2. 通過類型強制轉換 (activity as? XX)

3. 通過 EventBus

4. 廣播

...

Fragment -> Fragment:

1. 通過 Activity 中轉

2. FragmentManager

3. 通過 EventBus

4. 廣播

...

怎麼看起來都覺得很麻煩或者不夠優雅,或許還有更好的方式我不清楚而已。

但是,知道最近又出現了需要 Fragment -> Fragmen 通信後,再次開始思考有沒有更好的方式呢?

然後一頓搜尋猛如虎, 找到結果250。

部落格位址忘記了,主要是一個思路:利用 ViewModel + LiveData 來實作,也可以不用 LiveData 。

讓我們先來看下 ViewModel 的生命周期

activity,fragment和fragment之前的資料傳遞

圖檔來源:https://upload-images.jianshu.io/upload_images/4055001-9f82ba3d02428194.png

可以看到 ViewModel 的生命周期貫穿了整個 Activity ,跟 Activity 一緻。

是以,我們在 Activity 中建立的 ViewModel ,跟我們的 Fragment 中建立的 ViewModel 是同一個 ViewModel 類型, 那麼它們就是同一個!

恍然大悟的有沒有。既然是同一個對象,那麼任意一個地方修改了 ViewModel 中的 LiveData 中的資料, 我們都可以通過 LiveData 監聽來感覺資料的變化。

這樣,無論是 Activity 和 Fragment 之間,還是 Fragment 和 Fragment 之間,都可以随便操作資料來。

可參考:https://www.jianshu.com/p/5fbde7a2189e 中對 ViewModel 的使用。

這就是目前我感覺最友善優雅的 activity, fragment 和 fragment 通信方式了,如果有更好的,望告知,交流。