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,不要重复注册,否则只会有一个能接收到数据
这种方式不持有对方引用,避免了很多未知的问题,自带生命周期的监听,会在销毁的同时移除监听
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
2016-02-26 compileDebugJavaWithJavac