2

我有 MainActivity ,ViewPager它承载三个选项卡,它们各自的类扩展Fragment。其中一个选项卡的布局带有ListView,listView 中每个项目的布局如下

TextView, checkBox and imageview

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

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

4

1 回答 1

2

我想你可能误解了BaseAdapter. BaseAdapter-派生类旨在充当数据集与AdapterView显示该数据集信息(和/或与之交互)的接口。

考虑到这一点,我认为完成您正在做的事情的最简单方法是跟踪是否使用 aboolean作为数据集的一部分检查该项目。例如,如果您的数据集是ArrayList<SomeObjectYouMadeUp>,则您需要将boolean成员添加到SomeObjectYouMadeUp; CheckBox在's期间设置它OnCheckedChangeListener,并使用它来确定是否CheckBox应该在 's 期间进行目视检查getView()

这可能需要重新考虑您的代码,但相信我,您可能会想要这样做。可以按照您描述的方式进行操作,但这并不容易或可靠;您将希望AdapterView使用此处描述的方法单独访问您的每个可见视图,但我再次建议不要这样做。

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

问题清单还在继续。帮自己一个忙:将检查状态与数据集的其余部分一起保存,让 Android 为您解决。

于 2015-01-29T15:03:05.800 回答