android - 是否可以将 PreferenceActivity 与 SQLite 而不是 res/xml 一起使用?

标签 android sqlite android-preferences

美丽的PreferenceActivity是它与 Android 的 res/xml 的紧密集成.要实现 self 管理的偏好读取/保存的魔力以及 UI,您需要做的就是定义:

public class MyPreferenceActivity extends PreferenceActivity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.settings);
  }
}

并定义任意<PreferenceScreen> XML 文件中所需的结构。

但这似乎也是它的弱点:它集成得如此紧密,我不知道是否可以将 PreferenceActivity 与 SQLite 一起使用(用于更结构化的偏好管理),没有 re - 发明 while(即从头开始重写整个“PreferenceActivity”)。

例如,使用 OnSharedPreferenceChangeListener可能会提供一个将 PreferenceActivity 与 SQLite 结合使用的途径,但它仍然需要 res/xml定义到位 - 所以实际上我们仍然受到 limitations of the res/xml method 的限制.

有没有办法做到“鱼与熊掌兼得”?即使用 PreferenceActivity 与 SQLiteres/xml一样轻松的。

最佳答案

有趣的问题。

简短回答:据我所知,如果不进行大量自定义,就无法将 SQLite 与 PreferenceActivity 一起使用,因为它并非设计为以这种方式工作。

这里的重点是为什么您实际上需要 SQLite 来管理首选项? SQLite 应该作为一条规则永远不要用于不需要关系结构就可以管理的较少数据。例如,当您有类似数据的多个实例(例如表中的行)时,使用 SQLite 是非常有意义的。

在首选项的情况下,我想不出任何这样的例子。此外,与 SP 相比,SQLite 影响了应用程序的性能。明智地做出选择。

更新: 如果您有多个首选项,如上述问题,您可以结合使用 SQLite 和 SP。您肯定不能用 SQLite 替换 SP。但是可以做的是,您需要保留一个唯一键,该键将成为表的主键,然后在 PreferenceActivity 的 onPause 中,您需要在 SQLite 表中触发插入/更新查询。您需要小心并确保显示正确的 SP,因此在 PreferenceActivity 的 onResume 中,您需要能够使用唯一键触发提取查询并相应地设置 SP。

关于android - 是否可以将 PreferenceActivity 与 SQLite 而不是 res/xml 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7500926/

相关文章:

插入 sqlite3 值时出现 Python TypeError?

sql - 平均每小时平均转置SQLite行和列

Android 在不断开 3G 连接的情况下检查 Wifi 连接

java - 无法启动新 Activity

android - 修改 gradle 中的 cmake 参数以使用 C++ 库在 Android 项目中进行检测

ios - 访问 ios 应用程序文档和其他文件

Android:如何保存、清除然后恢复 SharedPreferences 以进行单元测试?

android - 如何从 Android SharedPreference 获取文本条目?

android - PreferenceFragmentCompat 在 PreferenceCategory 上有我无法摆脱的填充

java - Activity 之间的预加载器 - android java