2020 年 Fragment 最新文档(下),该更新知识库啦

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:从外部源(例如服务器或本地存储库)提取的数据,或由用户创建一旦提交就发送到服务器的数据。

通常,VariablesSavedState 的处理方式相同,但下表将两者进行了区分,以展示各种操作对它们的影响:

表1

*NonConfig state 在进程死亡时可以使用 Saved State module for ViewModel 保存状态。

让我们看一个具体的例子。我们生成一个随机字符串将其显示在 TextView 中,并提供一个发送给朋友之前编辑该字符串的选项:

用户按下编辑按钮后,将显示一个 EditText 视图,用户可以在其中编辑消息。如果用户点击CANCEL,则应清除 EditText 视图,并将其可见性设置为 View.GONE。为了保持良好的体验,该示例需要管理 4 个数据:


作者:Flywith24
链接:https://juejin.cn/post/6901453354463920135
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值