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

时间:2011-09-21 13:52:08

标签: android sqlite android-preferences

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

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

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

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

例如,使用OnSharedPreferenceChangeListener可以提供在SQLite中使用PreferenceActivity的网关,但它仍然需要res/xml定义 - 所以我们仍然受{{3}的限制}。

有没有办法“吃蛋糕也吃”?即使用limitations of the res/xml method使用PreferenceActivity,与res/xml相同。

1 个答案:

答案 0 :(得分:3)

有趣的问题。

简短回答:AFAIK,你无法使用带有PreferenceActivity的SQLite而不进行重要的自定义,因为它不是以这种方式工作的。

这就是为什么你真的需要SQLite来管理偏好? SQLite应该作为规则永远不会用于可以在不需要关系结构的情况下管理的较小数据。对于istance,当您有多个类似数据的实例(如表中的行)时,使用SQLite是完全合理的。

如果是偏好,我无法想象任何此类情况。此外,与SP相比,SQLite可以达到应用程序的性能。明智地做出你的选择。

<强>更新 如果您有多个偏好设置,如上面提到的问题,您可以使用SQLite和SP的组合。你无法用SQLite替换SP。但是可以做的是你需要保留一个唯一的密钥,它将成为表的主键,然后在onPause中,需要在SQLite表中触发插入/更新查询。您需要小心并确保显示正确的SP,因此在onResume of PreferenceActivity中您需要能够使用唯一键触发获取查询并相应地设置SP。