https://juejin.cn/post/6901453354463920135#heading-42
前言
很高兴见到你 👋,我是 Flywith24 。
最近 Android 官方针对 Fragment 文档进行了重新编写,使其适应 2020 年最佳实践的快速发展。
Fragment 的确是一个让开发者头疼的组件,它是一个很好的设计,但一直处于可改进的状态,随着 AndroidX Fragment 的快速更新,Fragment 已不同往日,虽然仍有改进的空间(单个 FragmentManager 不支持多返回栈,Fragment 自身和其 view 的生命周期不一致)。考虑到该文档的确有很多新知识以及官方文档的极慢的汉化速度,本文将 2020 版 Fragment 的官方文档翻译成中文,喜欢一手信息的小伙伴可直奔 官方原文。如果只想关注新文档中的变化,可 点此直达。限于篇幅原因,该文档分上下两部分。
【译】2020 年 Fragment 最新文档(上),该更新知识库啦
【译】2020 年 Fragment 最新文档(下),该更新知识库啦
本文为下半部分,将介绍以下内容:
- Fragment 的状态保存
- Fragment 间通信
- Fragment 于 AppBar 共同使用
- 使用 DialogFragment 显示 Dialog
- Fragment 测试
上半部分介绍:
- Fragment 的创建
- Fragment manager
- Fragment 事务
- Fragment 动画
- Fragment 生命周期
点击查看彩蛋😉 😝 欢迎来到彩蛋部分,您一定是个好奇心很强的小伙伴呢。
我是一个「强迫症晚期患者」,为了移动端更好阅读的体验,我经常将代码以图片的形式插入到文内。但随之而来出现一个问题:没办法 copy 代码(这对 cv 开发者很重要的 🤣)。
前些天,我在 github 某个项目的 README
文档中看到一个技巧,便是把较长且有些影响阅读的内容折叠,读者可以自由地选择展开。
这也是这个「彩蛋」的显示方式。后文中关于代码的部分我都会提供图片和可复制的源码两部分,其中后者处于折叠状态。您可以点击 「点击查看代码详情」以展开源码。
彩蛋结束。🥳
状态保存
各种 Android 系统操作可能会影响 fragment 的状态。 为了确保用户状态得到保存,Android 会自动保存并还原 fragment 的返回栈。因此,您需要确保 fragment 中的所有数据也被保存和还原。
下表罗列了导致 fragment 丢失状态的操作,以及各种状态是否被保存。表中提到的状态类型如下:
- Variables:fragment 的本地变量
- View State:fragment 中 一个或多个 view 拥有 的所有数据
- SavedState:该 fragment 实例固有的数据,应保存在
onSaveInstanceState()
中 - NonConfig:从外部源(例如服务器或本地存储库)提取的数据,或由用户创建一旦提交就发送到服务器的数据。
通常,Variables 与 SavedState 的处理方式相同,但下表将两者进行了区分,以展示各种操作对它们的影响:
*NonConfig state 在进程死亡时可以使用 Saved State module for ViewModel 保存状态。
让我们看一个具体的例子。我们生成一个随机字符串将其显示在 TextView
中,并提供一个发送给朋友之前编辑该字符串的选项:
用户按下编辑按钮后,将显示一个 EditText 视图,用户可以在其中编辑消息。如果用户点击CANCEL,则应清除 EditText 视图,并将其可见性设置为 View.GONE
。为了保持良好的体验,该示例需要管理 4 个数据:
作者:Flywith24
链接:https://juejin.cn/post/6901453354463920135
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。