android - 如何保存在 getView() 方法中定义的 View 的实例状态

标签 android android-fragments fragment baseadapter getview

我的 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/

相关文章:

java - 如何使用 Project Tango 拍摄高分辨率照片并同时感测深度

android - FragmentPagerAdapter,根据 fragment 变化隐藏和显示 Window.FEATURE_NO_TITLE

android - 处理绘图/绘画/保存多个位图

java - 片段无法工作并且有错误

android - 不使用newInstance/setArguments直接在Activity中创建DialogFragment是否正确?

java - "for (int clickableId : clickableIds)"有什么作用?

java - Android EditText 更改其他 EditText 值

android - 新版本中的 osmdroid tile 加载速度非常慢

java - Android:致命异常:java.lang.OutOfMemoryError

android - 在 Fragment 中使用 ViewModelFactory