Android 如何保存getView()方法中定义的视图的InstanceState

Android 如何保存getView()方法中定义的视图的InstanceState,android,android-fragments,fragment,baseadapter,getview,Android,Android Fragments,Fragment,Baseadapter,Getview,我有一个带有ViewPager的MainActivity,它承载三个选项卡,它们各自的类扩展了Fragment。其中一个选项卡的布局为列表视图 listView中每个项目的布局如下所示 TextView, checkBox and imageview 此ListView具有扩展BaseAdapter的自定义适配器类 我想做的是,保存ListView复选框的复选状态。 在扩展Fragment I重写方法的类中,问题是在 扩展BaseAdapter的类!我想知道如何在方法“onSaveInstan

我有一个带有
ViewPager
的MainActivity,它承载三个选项卡,它们各自的类扩展了
Fragment
。其中一个选项卡的布局为
列表视图
listView中每个项目的布局如下所示

TextView, checkBox and imageview
此ListView具有扩展
BaseAdapter
的自定义适配器类

我想做的是,保存ListView复选框的复选状态。 在扩展Fragment I重写方法的类中,问题是在
扩展BaseAdapter的类!我想知道如何在方法“onSaveInstanceState”中保存复选框的复选状态?

我想您可能误解了
BaseAdapter
的用途
BaseAdapter
-派生类用于充当数据集和
AdapterView
之间的接口,您可以在其中显示该数据集的信息(和/或与之交互)

考虑到这一点,我认为完成您正在做的事情的最简单方法是跟踪是否使用
布尔值作为数据集的一部分来检查项目。例如,如果您的数据集是一个
ArrayList
,则需要向
SomeObjectYouMadeUp
添加一个
boolean
成员;在
复选框
OnCheckedChangeListener
中设置它,并使用它来确定是否应在
getView()
期间目视检查
复选框

这可能需要重新思考您的代码,但相信我,您可能会想这么做。按照你描述的方式去做是可能的,但这并不容易,也不可靠;您可能希望使用获得对
AdapterView
中每个可见视图的单独访问权限,但我再次建议您不要这样做

最大的原因是
onSaveInstanceState
最常见于配置更改期间,例如,屏幕旋转。这意味着,几乎可以肯定,您将显示相同视图的假设是错误的。假设有10个视图在纵向方向可见,5个视图在横向方向可见。所以用户旋转到横向-我们得到哪5个?你确定吗?您必须检查每个新的
视图
,并对照您可能还必须保存在
onSaveInstanceState
中的一些标识信息,如果其中一个新视图在旋转之前不可见,该怎么办


问题还有很多。帮自己一个忙:将检查状态与数据集的其余部分一起保存,让安卓为您解决。

事实上,我正在开发一个方向固定的应用程序,我有一个问题,SaveInstanceState是否保存我关心的视图的状态,并帮助将它们返回到上次设置的状态,即使我关闭并重新启动了应用程序?我希望我的问题是清楚的您的问题是清楚的,但这不是
onSaveInstanceState()
的目的。您不能使用它永久保存数据;有很多情况下,Android会破坏一个活动并重新创建它,因为配置发生了变化(屏幕旋转是一个例子,但还有很多其他例子,比如将设备插入汽车停靠站)。在这些情况下,
onSaveInstanceState()
用于向重新创建的活动提供数据,以使转换尽可能无缝。您可以找到有关使用
onSaveInstanceState()
的更多详细信息。