2011-09-21 66 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

相關問題