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

Android 是否可以将PreferenceActivity与SQLite而不是res/xml一起使用?,android,sqlite,android-preferences,Android,Sqlite,Android Preferences,其美妙之处在于它与Android的res/xml紧密集成。要实现自我管理的首选项读取/保存以及UI的魔力,您只需定义: public class MyPreferenceActivity extends PreferenceActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromR

其美妙之处在于它与Android的
res/xml
紧密集成。要实现自我管理的首选项读取/保存以及UI的魔力,您只需定义:

public class MyPreferenceActivity extends PreferenceActivity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.settings);
  }
}
并在XML文件中定义所需的任何
结构

但这似乎也是它的弱点:它是如此紧密地集成在一起,以至于我不知道是否可以将PreferenceActivity与SQLite一起使用(用于更结构化的首选项管理),而不必重新发明while(即从头开始重新编写整个“PreferenceActivity”)

例如,使用可以提供一个将PreferenceActivity与SQLite一起使用的网关,但它仍然需要有
res/xml
定义,因此实际上我们仍然受到限制

有没有办法“既吃蛋糕,又有蛋糕”?i、 e.与
res/xml
一样轻松地使用PreferenceActivity。

有趣的问题

简短回答:好吧,如果不进行重要的定制,您就无法将SQLite与PreferenceActivity一起使用,因为它不是以这种方式设计的

这里的要点是,为什么您实际上需要SQLite来管理首选项?SQLite通常不应用于不需要关系结构即可管理的较小数据。对于istance,当您有多个类似数据的实例(如表中的行)时,使用SQLite非常有意义

在偏好的情况下,我无法计算任何这样的实例。此外,与SP相比,SQLite可以提高应用程序的性能。请明智地做出选择

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

感谢+1的回答。为了回答您的问题,在我的专栏文章中,我发布了一个链接,链接到我先前的一个问题,这帮助我认识到,使用
res/xml
,分层键控是不可能的。建议使用SQLite。我仍在为如何实施这项建议而挣扎。谢谢,我没有看到其他问题。我已经更新了我的答案。再次+1用于概述解决方案。IIUC,关键是通过
onPause()
onResume()
使SQLite与
res/xml
保持同步。该唯一键可以是
res/xml
文件中嵌套键的串联,该文件一直存在,但由于某些原因,
res/xml
本身无法使用。我会接受这个答案(除非有更好的答案出现)。谢谢我想我不清楚。唯一键不会是任何连接。它可能来自于您启动PreferenceActivity时的其他活动。例如,你有5个视频,每个视频都有自己的偏好。然后,当您调用preferenceactivity时,您需要传递视频的id,这将是数据库中的主键。xml的键是相同的,不会改变。