在我的首選項屏幕中,我將偵聽器設置爲onCreate()
上的某些首選項。
但我注意到每次加載首選項時都會調用監聽器(可能是onCreate())。
有沒有辦法來防止這種情況?
我當然想要只在給定鍵中的優先值改變時才調用監聽器。setOnPreferenceChangeListener在安卓中指定偵聽器時調用
感謝
在我的首選項屏幕中,我將偵聽器設置爲onCreate()
上的某些首選項。
但我注意到每次加載首選項時都會調用監聽器(可能是onCreate())。
有沒有辦法來防止這種情況?
我當然想要只在給定鍵中的優先值改變時才調用監聽器。setOnPreferenceChangeListener在安卓中指定偵聽器時調用
感謝
你可以這樣做。您需要在onResume
中註冊您的聽衆並在註銷。通過這種方式,當您的活動被創建時,它將不會被調用,因爲初始更改的偏好值已經發生。
public class SettingsActivity extends PreferenceActivity
implements OnSharedPreferenceChangeListener {
@Override
protected void onResume() {
super.onResume();
// Set up a listener whenever a key changes
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onPause() {
super.onPause();
// Unregister the listener whenever a key changes
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
// Let's do something a preference value changes
}
}
工作很好。謝謝 – SagiLow
變化聽衆火,即使改變發生編程,不完全因爲用戶輸入(因爲用戶輸入最終導致了vaue一個綱領性的變化,因此,不區分)的結果。
解決方案是在創建視圖後添加偵聽器,並使用當前設置的首選項填充偵聽器,而不是在onCreate
中添加偵聽器。
你目前的代碼是做什麼的? – Szymon