我知道Android提供了一种机制,允许开发人员通过以下方法保存和恢复活动中的状态:
protected void onSaveInstanceState (Bundle outState)
protected void onRestoreInstanceState (Bundle savedInstanceState)
我见过很多例子,人们展示了如何保存简单状态(例如列表视图中的当前索引),还有很多例子,人们说listview应该只有一个允许列表的数据模型支持要恢复。然而,当事情变得更加复杂并且用户交互更加复杂时,我一直在努力寻找保存这种状态的正确方法。
我有一个listview,其中包含每行的自定义控件。单击时,一行将展开动画以向用户显示其他详细信息...在附加详细信息视图中,用户还可以更改某些内容。现在我知道如果我的Activity被销毁(或我的Fragment被替换),反映UI的当前状态发生变化,用户与列表的交互现在就丢失了。
我的问题是如何正确保存listview的详细状态,以便保留每个自定义组件行的状态?
谢谢!
修改:感谢下面的回复。我知道SharedPreferences可以用来存储键值状态,但是,我想我对视图状态更感兴趣....例如Android会自动保存/恢复EditText字段的视图状态(即其内容)我的活动,那么如何在列表视图中使用更复杂的自定义组件来实现相同的功能呢?我是否真的必须自己手动保存这个状态(即保存哪些列表视图行已经扩展,保存用户所做的/切换的所有ui更改等)?
答案 0 :(得分:0)
我不确定,但我认为SharedPreferences是您可能正在寻找的。 p>
答案 1 :(得分:0)
答案 2 :(得分:0)
我不想这么说,但似乎这一切都必须自己完成。该框架没有提供“保存状态”的预制方法。
无论您是将状态保存在Bundle还是SharedPreferences中,我认为重点是你需要确定反映当前列表选择的状态变量,并自行保留,onResume()
你需要将这种状态重新引入你的活动中。
......非常简单的手动过程,正如你所说......