如何在getView()方法中定义的视图的saveInstanceState

时间:2015-01-29 14:40:37

标签: android android-fragments fragment baseadapter getview

我有一个ViewPager的MainActivity,它包含三个标签,它们各自的类扩展Fragment。其中一个标签的布局为ListView listView中每个项目的布局如下

TextView, checkBox and imageview

此ListView具有扩展BaseAdapter的自定义适配器类。

我想要做的是,保存ListView的Checkbox的检查状态。 在扩展Fragment的类中,我重写方法onSaveInstanceState,问题是checkBoxes是在getview()方法中定义的 扩展BaseAdapter的类!我想知道如何在方法" onSaveInstanceState"中保存复选框的检查状态?

1 个答案:

答案 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为你解决。