保存Android Listview的高级状态

保存Android Listview的高级状态,android,listview,Android,Listview,我知道Android提供了一种机制,允许开发者通过以下方法保存和恢复活动中的状态: protected void onSaveInstanceState (Bundle outState) protected void onRestoreInstanceState (Bundle savedInstanceState) 我看过很多例子,其中人们展示了如何保存简单状态(例如listview中的当前索引),还有很多例子,其中人们说listview应该由一个数据模型支持,该模型将允许恢复列表。然而,

我知道Android提供了一种机制,允许开发者通过以下方法保存和恢复活动中的状态:

protected void onSaveInstanceState (Bundle outState)
protected void onRestoreInstanceState (Bundle savedInstanceState)
我看过很多例子,其中人们展示了如何保存简单状态(例如listview中的当前索引),还有很多例子,其中人们说listview应该由一个数据模型支持,该模型将允许恢复列表。然而,当事情变得越来越复杂,用户交互也越来越复杂时,我一直在努力找到保存这种状态的正确方法

我有一个listview,它包含每行的自定义控件。单击时,一行将以动画展开,以向用户显示其他详细信息。。。在附加详细信息视图中,用户还可以更改某些内容。现在我知道,如果我的活动被销毁(或我的片段被替换),反映UI的当前状态将发生更改,用户与列表的交互现在将丢失

我的问题是如何正确地保存listview的这个详细状态,从而也保留每个自定义组件行的状态

谢谢


编辑:感谢您的回复。我知道SharedReference可以用来存储键值状态,但是,我想我对视图状态更感兴趣。。。。例如,Android将在我的活动中自动保存/恢复EditText字段(即其内容)的viewstate,那么如何在listview中使用更复杂的自定义组件实现同样的功能呢?我真的必须自己手动保存这个状态吗(例如,准确地保存哪些listview行已展开,保存用户所做/切换的所有ui更改,等等)?

我不确定,但我假设这就是您可能要查找的。

使用in-onPause()方法

当移动到后台时,您可以在其中存储所有活动数据


当您想要从共享首选项恢复数据获取时。

我不想这样说,但似乎这一切都必须由您自己完成。该框架不提供“保存视图状态”的预制方法

无论您是将状态保存在Bundle还是sharedReferences中,我认为关键是您需要确定反映当前列表选择的状态变量,自己保存它们,并且
onResume()
您需要将该状态重新引入到您的活动中

。。。正如你所说,这是一个相当手工的过程