2020 年 4 月 29 日,發布了 androidx.fragment:fragment:1.3.0-alpha04 的版本,改版本棄用了之前fragment的傳輸資料方式,添加了新的api,如下圖

以前的Fragment傳輸資料應該都用過,獲取fragment實體,arguments,回呼,eventbus等,方式的確多樣化,以前大多數傳遞都需要持有實體,這是很危險的
但是谷哥已經推新了,現在推薦使用新的api去傳遞資料,在版本1.3.0-alpha04 中新增了result api去操作
很簡單,假如你要在兩個fragment之間傳遞,需要用到兩個api,一個發送,一個接收,這里做一個測驗,首先啟動一個SplashFragment,在啟動頁結束的時候發送一個資料過去HomeFragment
別忘了添加參考
implementation "androidx.fragment:fragment-ktx:1.3.0-rc02"
發送時

接收時

這樣一看是不是一目了然了,這兩個方法可以直接使用,kotlin自帶的api,點進去可以看到原始碼


發現是parentFragmentManager中方法,只是kotlin簡化了而已
現在運行一波,啟動頁結束進入HomeFragment,然后會在同時收到我們發過去的資料

上面是兩個Fragment同級的傳遞方式,那如果換個場景,Fragment是子集的時候,監聽就不一樣了,這里新建一個TabFragment,然后TabFragment里面有兩個子tab,現在子tab要傳遞資料到TabFragment中
首先還是一樣的,在TabFragment里注冊好接收

這里不是直接用parentFragmentManager了,需要用childFragmentManager去注冊了,不然會失效,然后發送還是一樣,這里在子tab里顯示一個textview,點擊textview的時候發送一條資料過來

然后運行一波

在換一個場景,如果從TabFragment中傳遞資料到子tab中,子tab去接收,這里在TabFragment中添加一個懸浮按鈕,點擊按鈕傳遞資料到子tab中

這時候發送就不一樣了,因為是發送到子tab中,所以需要使用childFragmentManager去發送

在運行一波看看

這里需要注意注冊的key,不要重復注冊,否則只會有一個能接收到資料
這種方式不持有對方參考,避免了很多未知的問題,自帶生命周期的監聽,會在銷毀的同時移除監聽
github:https://github.com/1024477951/KotlinStrong
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/264110.html
標籤:其他
下一篇:寫一個簡單的cat命令
