- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Android開发中如何正确保存view的状态
Android开发中如何正确保存view的状态?
本文是由国外资深开发转件对,Android开发中view的状态正确保存方法的一个深入介绍。为什么是对view的讲解,而不是对Activity 和 Fragment状态保存的讲解呢?是因为前者比后两者稍微复杂,且网上还有太多混淆开发者的讲解。
为什么我们需要保存View的状态?
因为,我坚信移动应用应该是帮助开发者解决问题,而不是制造问题。
想象一下一个非常复杂的设置页面:
这并不是从一个移动应用的截图(这不是典型的win32程序吗。。),但是适合用于说明我们的问题:
这里有非常多的文字输入控件,多选框,开关(switch)等等,你花了15分钟填完所有这些格子,总算轮到点击完成按钮了,但是突然,你不小心旋转了下屏幕,omg,所有的改动都没了,一切都回归到了初始状态。
当然,总有一些用户喜欢你的app简直到不行,不在乎重新填一次。但是老实说,这样做真的正确吗?别犯傻,你不尊重客户体验度,客户就不会喜欢你的APP,我们需要保存用户的修改。
如何保存View的状态?
假设我们这里有一个带有图像,文字和 Switch toggle控件的简单布局:
LinearLayout
xmlns:android=/apk/res/android
android:layout_width=match_parent
android:layout_height=match_parent
android:orientation=horizontal
android:padding=@dimen/activity_horizontal_margin
ImageView
android:layout_width=wrap_content
android:layout_height=wrap_content
android:src=@drawable/ic_launcher/
TextView
android:layout_width=0dip
android:layout_weight=1
android:layout_height=wrap_content
android:text=My Text/
Switch
android:layout_width=wrap_content
android:layout_height=wrap_content
android:layout_margin=8dip/
/LinearLayout
看吧,非常简单的布局。但是当我们滑动一下switch开关然后旋转屏幕方向,switch又回到了原来的状态。
通常,安卓会自动保存这些View(一般是系统控件)的状态,但是为什么在我们的案例中不起作用了呢?
让我们先停下来,弄明白安卓是如何管理View状态的。这里是正常情况下保存与恢复的示意图:
saveHierarchyState(SparseArrayParcelable container)
- 当状态需要保存的时候被安卓framework调用,通常会调用dispatchSaveInstanceState() 。
dispatchSaveInstanceState(SparseArrayParcelable container)
- 被saveHierarchyState()调用。 在其内部调用onSaveInstanceState(),并且返回一个代表当前状态的Parcelable。这个Parcelable被保存在container参数中,container参数是一个键值对的map集合。View的ID是加键Parcelable是值。如果这是一个ViewGroup,还需要遍历其子view,保存子View的状态。
Parcelable onSaveInstanceState()
- 被 dispatchSaveInstanceState()调用。这个方法应该在View的实现中被重写以返回实际的View状态。
restoreHierarchyState(SparseArrayParcelable container)
- 在需要恢复View状态的时候被android调用,作为传入的SparseArray参数,包含了在保存过程中的所有view状态。
dispatchRestoreInstanceState(Sp
您可能关注的文档
最近下载
- 住院医师规范化培训教学活动指南(2021年版)文字版.docx
- tc helicon voicelive人声效果器中文说明书.pdf
- 高中化学知识点总结.docx VIP
- 京东集团员工手册-京东.docx
- 2024年江苏省政府采购专家库题库.docx VIP
- 电力安装三方合同协议书.docx
- 2025年汉江国有资本投资集团有限公司招聘【57人】笔试参考题库附带答案详解.docx
- 高标准农田建设项目管理.pptx
- 蒸压加气混凝土制品应用技术标准.pdf
- 部编版历史七年级上册第一单元 史前时期 中国境内早期人类与文明的起源 大单元整体学历案教案 教学设计附作业设计(基于新课标教学评一致性).docx
文档评论(0)