2012-07-03 79 views
2

我的應用程序中包含PreferenceActivity和Service以及其他組件。OnSharedPreferenceChangeListener在用戶首次進入首選項活動時觸發

當首選項發生變化時,我希望我的服務根據首選項更改進行一些工作,因此我將服務配置爲OnSharedPreferenceChangeListener

我的問題是當用戶第一次輸入偏好活動時。 OnSharedPreferenceChange事件在「preferences.xml」中爲每個首選項觸發一次,但沒有更改首選項。

我怎樣才能避免這種行爲?我不希望OnSharedPreferenceChange事件在用戶第一次輸入「首選項活動」時觸發。

感謝

回答

1

只需使用一個標誌sharedpreferences,就這樣

if(prefs.getBoolean("preferenceFirstTime", true)) { 
     SharedPreferences.Editor editor = prefs.edit(); 
     editor.putBoolean("preferenceFirstTime", false); 
     editor.commit(); 
} else { 
     //this is not the first time 
} 
+1

感謝您的回答。你給了我解決問題的想法。我所做的就是像你告訴我的那樣創造一面旗幟。在'onSharedPreferenceChanged'方法中,我只是檢查這個標誌。如果這是第一次,我什麼都不做。並且在PreferenceActivity的「onResume」方法中,我將該標誌設置爲'false',因此下次調用'onSharedPreferenceChanged'方法將執行所期望的操作。感謝這個想法。 – Eduardo

+0

aswer是錯誤的,但註釋是正確的:您必須在PreferenceActivity.onResume中設置標誌,而不是在onSharedPreferenceChanged中。 –

+0

這個答案是錯誤的,評論也沒有推廣一個好方法。你應該在'MainActivity.onCreate()'中設置首選項默認值,如@kakopappa的答案所示。 –

3

我有同樣的問題,我發現另一種方式利用此來解決這個問題。

PreferenceManager.setDefaultValues(this, R.xml.preference, false); 

這樣,您可以在註冊更改之前設置首選項的默認值。

+0

1+這應該被標記爲答案。 –