1.3.0-alpha04 Fragment result api

2020 年 4 月 29 日,發佈了 androidx.fragment:fragment:1.3.0-alpha04 的版本,改版本棄用了以前fragment的傳輸數據方式,添加了新的api,以下圖android

 

之前的Fragment傳輸數據應該都用過,獲取fragment實例,arguments,回調,eventbus等,方式的確多樣化,之前大多數傳遞都須要持有實例,這是很危險的git

可是谷哥已經推新了,如今推薦使用新的api去傳遞數據,在版本1.3.0-alpha04 中新增了result api去操做github

很簡單,假如你要在兩個fragment之間傳遞,須要用到兩個api,一個發送,一個接收,這裏作一個測試,首先啓動一個SplashFragment,在啓動頁結束的時候發送一個數據過去HomeFragmentapi

別忘了添加引用測試

implementation "androidx.fragment:fragment-ktx:1.3.0-rc02"

發送時3d

接收時code

這樣一看是否是一目瞭然了,這兩個方法能夠直接使用,kotlin自帶的api,點進去能夠看到源碼blog

發現是parentFragmentManager中方法,只是kotlin簡化了而已生命週期

如今運行一波,啓動頁結束進入HomeFragment,而後會在同時收到咱們發過去的數據get

上面是兩個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

相關文章
相關標籤/搜索