我有一个ViewPager
的MainActivity,它包含三个标签,它们各自的类扩展Fragment
。其中一个标签的布局为ListView
listView中每个项目的布局如下
TextView, checkBox and imageview
此ListView具有扩展BaseAdapter
的自定义适配器类。
我想要做的是,保存ListView的Checkbox的检查状态。
在扩展Fragment的类中,我重写方法onSaveInstanceState
,问题是checkBoxes是在getview()
方法中定义的
扩展BaseAdapter的类!我想知道如何在方法" onSaveInstanceState"中保存复选框的检查状态?
答案 0 :(得分:2)
我认为你可能会误解BaseAdapter
的目的。 BaseAdapter
- 派生类用作数据集与显示该数据集信息(和/或与之交互)的AdapterView
之间的接口。
考虑到这一点,我认为完成您正在做的事情的最简单方法是跟踪是否使用boolean
作为数据集的一部分来检查项目。例如,如果您的数据集是ArrayList<SomeObjectYouMadeUp>
,则您需要将boolean
成员添加到SomeObjectYouMadeUp
;在CheckBox
的{{1}}期间设置它,并使用它来确定OnCheckedChangeListener
期间是否应该目视检查CheckBox
。
这可能需要重新考虑你的代码,但相信我,你可能会想要这样做。它可以按照你描述的方式来做,但它不容易或不可靠;您希望使用the method described here获取getView()
中每个可见视图的个人访问权限,但我不得不建议您不要这样做。
最大的原因是AdapterView
在配置更改期间最常出现 - 例如,屏幕旋转。这意味着几乎可以肯定的是,您将显示相同的视图。假设纵向有10个视图,横向可见5个。所以用户旋转到横向 - 我们得到了哪些?你知道吗?您必须检查每个新的onSaveInstanceState
以查找您可能必须保留在View
中的某些识别信息 - 以及如果其中一个新视图在轮换之前不可见,该怎么办?
问题清单继续。帮自己一个忙:用你的数据集的其余部分保存检查状态,然后让Android为你解决。