什么是在Android中保存大量Checkboxes状态的最佳方法?

时间:2010-09-11 01:09:05

标签: android checkbox savestate

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

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

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

1 个答案:

答案 0 :(得分:2)

您可以使用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字节。另一方面,仅使用一个长度仅占用 8个字节。使用的字节越少,您的应用程序就越快(因为Android必须处理并节省更少的字节)。