我的 MainActivity 带有一个 ViewPager
,它托管三个选项卡,它们各自的类扩展了 Fragment
。其中一个选项卡的布局带有 ListView
,
listView中每一项的布局如下
TextView, checkBox and imageview
此 ListView 具有扩展 BaseAdapter
的自定义适配器类。
我想做的是,保存ListView 的Checkboxes 的选中状态。
在扩展 Fragment 的类中,我覆盖了方法 onSaveInstanceState
,问题是复选框是在 getview()
方法中定义的
扩展 BaseAdapter 的类!我想知道如何在“onSaveInstanceState”方法中保存复选框的选中状态?
最佳答案
我认为您可能误解了 BaseAdapter
的用途. BaseAdapter
-派生类旨在充当数据集和 AdapterView
之间的接口(interface)。在其中显示该数据集的信息(和/或与之交互。)
考虑到这一点,我认为完成您正在做的事情的最简单方法是使用 boolean
跟踪项目是否被检查。作为数据集的一部分。例如,如果您的数据集是 ArrayList<SomeObjectYouMadeUp>
,您需要添加 boolean
加入 SomeObjectYouMadeUp
;在 CheckBox
期间设置它的 OnCheckedChangeListener
, 并用它来确定是否 CheckBox
应在 getView()
期间进行目视检查.
这可能需要重新考虑您的代码,但请相信我,您可能会想要这样做。可以按照您描述的方式进行操作,但这并不容易或可靠;您将希望单独访问您的 AdapterView
中的每个可见 View 使用 the method described here ,但我不得不再次反对这一点。
最大的原因是onSaveInstanceState
最常发生在配置更改期间 - 例如,屏幕旋转。这意味着您将显示相同的 View 几乎肯定是一个错误的假设。假设有 10 个 View 在纵向可见,5 个在横向可见。所以用户旋转到横向 - 我们得到哪 5 个?你确定知道吗?您必须检查每个新的 View
针对一些您可能还必须保留的身份信息 onSaveInstanceState
- 如果其中一个新 View 在旋转之前不可见怎么办?
问题 list 还在继续。帮自己一个忙:将检查状态与其余数据集一起保存,让 Android 为您解决。
关于android - 如何保存在 getView() 方法中定义的 View 的实例状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28217377/