2011-01-22 47 views
1

我有SharedPreferences(一個顯示在PreferenceActivity中,第二個存儲的值不能在PreferenceActivity中看到)的2個文件。問題 - 我想在啓動時從這兩個文件加載這些值。來自多個文件的SharedPreferences

  1. 我試圖getSharedPreferences()和傳遞的文件名。奇怪的是,我無法讀取真實值 - 它總是返回默認值。

  2. 如果我使用addPreferencesFromResource()並通過資源文件的ID讀值,但我不能使用這種方法,因爲我Activity必須繼承PreferenceActivity,這是我不想做的事。

如何從多個首選項文件讀取值?作爲第一個參數,必須在getSharedPreferences()中傳遞什麼(帶有擴展名的文件名,沒有擴展名的文件名等)?有一種方法PreferenceManager.getDefaultSharedPreferences()。當我有超過1個文件時,什麼是「默認」?

如此簡單任務做,浪費了那麼多時間......

回答

2

簡短的回答:這聽起來像你在某些時候這將載入默認偏好文件,而不是你的「命名」的偏好打電話PreferenceManager.getGlobalPreferences。如果你正在混合這和context.getSharedPreferences("PREFS_NAME", Context.MODE_WORLD_READABLE)你會得到奇怪的行爲。

龍答: 你必須指定你要每次讀取的首選項文件的打開它的名字:

SharedPreferences prefs = context.getSharedPreferences("PREFS_NAME", Context.MODE_WORLD_READABLE) 

這將迫使應用,使新首選項文件的文件名「PREFS_NAME.xml」(如果它尚不存在並開始使用它)。

addPreferencesFromFile()是一個不同的函數,它僅用於填充PreferenceActivity。如果你不想使用PreferenceActivity,那麼它對你沒用。

如果你決定使用偏好活動設置,使用以上則設置此偏好活動實例的喜好與

getPreferenceManager().setSharedPreferencesName("PREF_NAME); 

然後調用addPreferencesFromResource()。如果你不使用PreferenceActivity,那麼addPreferencesFromResource()將不會爲你做任何事情。