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,不要重复注册,不然只会有一个能接收到数据
这种方式不持有对方引用,避免了不少未知的问题,自带生命周期的监听,会在销毁的同时移除监听