【问题标题】:what is Best way to save the large number of Checkboxes state in Android?在Android中保存大量复选框状态的最佳方法是什么?
【发布时间】:2010-09-13 21:43:10
【问题描述】:

我在一个 Activity 上有大约 34 个复选框,我必须标记和取消标记。我想保存每个复选框的状态。

我一直想要这个。那么我应该有一个 sqlite 表或首选项吗?

如果推荐使用sqlite表,那么理想的表结构设计应该是什么?

【问题讨论】:

    标签: android checkbox savestate


    【解决方案1】:

    您可以使用 SQLite 或首选项来完成。虽然...您想做的事情有点简单,那么您为什么要关心创建表格、创建SQliteOpenHelper 对象、设计表格等。偏好方法更简单。

    所以...这里最重要的是您如何识别您的复选框。如果您只有 34 个静态复选框(意味着它们不会更改其顺序)并且它们被放入一个数组中(这将是理想的),那么您就很容易了。

    您可能知道,首选项编辑器不允许保存数组。所以你有一些选择:

    • 将每个状态保存到不同的首选项槽中(例如:putBoolean("checkbox2", true)putBoolean("checkbox3", false);等等)
    • 将所有状态保存到一个字符串中:putString("checkboxes_state", "10101011100011010");这样,您将拥有一个包含 34 个字符的字符串,每个字符代表一个状态。
    • 如果你想要效率,你可以用一个简单的long等于或小于17179869183来表示所有状态。例如putLong("checkboxes_state", 17179869183)意味着所有的复选框都被选中(因为它的二进制表示是1111111111111111111111111111111111)。更多示例:
      • 12159999103 = 1011010100110010101101110001111111
      • 1 = 0000000000000000000000000000000001,表示只选中最后一个复选框。

    编辑

    关于为什么最后一个更有效的问题,让我简要解释一下。第一个意味着使用 34 个偏好插槽(实际上我不知道它们是如何存储的;希望 android 团队负责性能)。第二种方法将使用 34 个字符的字符串;所以,String 对象的最小尺寸是:

    minimum String memory usage (bytes) = 8 * (int) ((34 * 2 + 45) / 8) = 113 bytes
    

    意味着该长度的字符串将占用至少 113 个字节。另一方面,仅使用一个 long 将仅占用 8 个字节。使用的字节数越少,您的应用程序就会越快(因为 Android 必须处理和保存的字节数越少)。

    【讨论】:

    • 感谢克里斯蒂安。是的,我有静态复选框。我想你所说的前两种方法比第三种方法更容易实现。还有更多我想知道是什么让第三个高效?
    • 如果复选框在字符串中存储为 1011010100110010101101110001111111,您将如何从 sqlite 中检索这些复选框?
    • 拆分字符串并解析成复选框
    猜你喜欢
    • 2015-07-02
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    • 2013-02-04
    相关资源
    最近更新 更多