【问题标题】:how to saveInstanceState of a view defined in getView() method如何保存 getView() 方法中定义的视图的实例状态
【发布时间】:2015-01-29 14:40:36
【问题描述】:

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

TextView, checkBox and imageview

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

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

【问题讨论】:

    标签: android android-fragments fragment baseadapter getview


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 实际上我正在开发一个具有固定方向的应用程序,我有一个问题,saveinstancesate 是否保存了我关心的视图的状态并帮助它们返回到最后设置的状态,即使我关闭应用程序并重新启动它?我希望我的问题很清楚
    • 您的问题很清楚,但这不是onSaveInstanceState() 的目的。您不能使用它来永久保存数据;在许多情况下,Android 会因为配置更改而销毁 Activity 并重新创建它(屏幕旋转是一个示例,但还有很多其他情况,例如将设备插入车载底座)。在这些情况下,onSaveInstanceState() 用于为重新创建的 Activity 提供数据,以使过渡尽可能无缝。
    • 你可以找到更多关于你为什么要使用onSaveInstanceState()here的细节。
    猜你喜欢
    • 2011-03-14
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 2013-04-15
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多