2015-12-02 25 views
0

我收到了PreferenceActivity。當用戶正在改變的偏愛,我想節省一些額外優惠,因此OnPreferencesChange方法中,我得到了這樣的事情:在PreferenceActivity之外獲取偏好

if(p.getKey().equals("mykey")) //there is no issue with this if. it enters and get inside to the commit command 
{ 
    getPreferences(MODE_PRIVATE).edit().putString("otherKey","value").commit(); 
    return true; 
} 

我也得到一個服務(這當然是不同的類比的PreferenceActivity),我想在其中閱讀首選項。所以我在做這樣的事情:

sp = PreferenceManager.getDefaultSharedPreferences(); 
String val1 = dsp.getString("myKey","default1"); 
String val2 = dsp.getString("otherKey","default2"); 

我得到「的myKey」的正確價值,但總是得到「默認設置2」爲「otherKey」。這是爲什麼?難道服務會得到錯誤的SharedPreference?

回答

1

而不是

getPreferences(MODE_PRIVATE).edit().putString("otherKey","value").commit(); 

做:

PreferenceManager.getDefaultSharedPreferences(this).edit().putString("otherKey","value").commit(); 

getPreferences()返回 「SharedPreferences對象訪問是私人這項活動首選項」,根據文件。

0

正如醫生說的getPreferences

檢索SharedPreferences對象訪問是 私人這項活動的偏好。通過傳入此活動的 類名稱作爲首選項名稱,這只是簡單地調用底層 getSharedPreferences(String,int)方法。

getDefaultSharedPreferences

獲取指向該 用於通過在給定上下文偏好框架的默認文件SharedPreferences實例。

所以這兩個方法返回不同的偏好對象,這就是爲什麼你得到默認值。

getPreferences(MODE_PRIVATE)更改爲PreferenceManager.getDefaultSharedPreferences()

相關問題