2011-09-21 94 views
2

PreferenceActivity的美妙之处在于它与Android的res/xml的紧密结合。所有你需要做的实现自我管理优先读取/保存的魔力,与UI一起,是定义:是否可以使用PreferenceActivity与SQLite而不是res/xml?

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

,并定义任何<PreferenceScreen>结构您在XML文件(S)的需要。

但是,这也似乎是它的弱点:它是如此紧密集成,我不知道是否可以使用PreferenceActivity使用SQLite(一个更有条理的偏好管理),没有重新发明的,而(即从头开始重写整个“PreferenceActivity”)。

例如,使用OnSharedPreferenceChangeListener可以提供网关使用PreferenceActivity使用SQLite,但它仍然需要res/xml定义要到位 - 所以真的,我们仍然被limitations of the res/xml method限制。

有没有办法“吃蛋糕,也有它”?即使用SQLite的使用偏好活动与res/xml一样容易。

回答

3

有趣的问题。您可以使用SQLite与PreferenceActivity没有做大量的定制,因为它不是以这种方式工作。

这里的重点是为什么你实际上需要SQLite来管理偏好? SQLite应该根据规则永远不要用于可以在不需要关系结构的情况下进行管理的较小数据。为了便于使用SQLite,当你有类似数据的多个实例(如表中的行)时,这是非常有意义的。

在首选项的情况下,我无法找出任何这样的实例。而且,与SP相比,SQLite击中了应用程序的性能。明智地做出你的选择。

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

+0

感谢+1为您的答案。为了回答你的问题,在我的OP中,我发布了一个链接到我的早期问题,这帮助我意识到,使用'res/xml'不可能实现**等级键控。那里的建议是使用SQLite。我仍在为如何实施这一建议而苦苦挣扎。 – uTubeFan

+1

谢谢我没有看到其他问题。我已经更新了我的答案。 – PravinCG

+0

+1再次概述解决方案。 IIUC,关键是通过'onPause()'&'onResume()'让SQLite与'res/xml'保持同步。这个唯一的键可能是'res/xml'文件中嵌套键的连接,它一直存在,但由于某些原因,不能由'res/xml'本身使用。我会接受这个答案(除非有更好的答案出现)。谢谢! – uTubeFan

相关问题