2010-02-10 59 views
5

我知道我可以做這樣的事情:OnPreferenceChangeListener每一個設置

Preference pref = findPreference(getString(R.string.pref_vibrate_on_key)); 
pref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 

     @Override 
     public boolean onPreferenceChange(Preference preference, 
       Object newValue) { 
      LogUtil.d("Working!"); 
      return true; 
     } 

}); 

但我想一個監聽器添加到每個偏好。 我試過了:

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); 
sp.registerOnSharedPreferenceChangeListener(new OnSharedPreferenceChangeListener() { 

     @Override 
     public void onSharedPreferenceChanged(
       SharedPreferences sharedPreferences, String key) { 
      LogUtil.d("working!"); 

     } 

}); 

但它不起作用。 這可能嗎?如果是這樣,我做錯了什麼?

+0

[這裏](http://stackoverflow.com/questions/2542938/sharedpreferences-onsharedpreferencechangelistener-not-being所謂的一貫)就是你做錯了 - 對吧? – 2013-03-30 14:39:57

回答

1

我認爲onSharedPrefererenceChanged是在保存偏好時觸發的(當您點擊BACK或HOME PreferenceActivity時)。我認爲最簡單的方法是創建單個類實現OnPreferenceChangeListener並切換到Preference.getKey();並將其設置爲OnPreferenceChangeListener爲每個首選項。

+0

'onSharedPreferenceChanged'不會在BACK/HOME上被調用。 (或者甚至離開活動) – 2016-03-27 15:10:54

+0

http://developer.android.com/guide/topics/ui/settings.html#Listening描述了這種方法。 @YoushaAleayoub你是否確定listener在launchig PreferenceActivity之後仍然被註冊,並且它被註冊到相同的SharedPreferences? – skyman 2016-03-29 13:02:11

6

假設你想每次調用相同的偵聽器,這可能是一個簡單的解決方案:

Preference.OnPreferenceChangeListener changeListener = new Preference.OnPreferenceChangeListener() { 
    public boolean onPreferenceChange(Preference preference, Object newValue) { 
     // Code goes here    
     return true; 
    } 
}; 

EditTextPreference pref = (EditTextPreference)findPreference(getString(R.string.pref1)); 
pref1.setOnPreferenceChangeListener(changeListener); 

EditTextPreference pref2 = (EditTextPreference)findPreference(getString(R.string.pref2)); 
pref2.setOnPreferenceChangeListener(changeListener); 
+0

不支持支持偏好庫 – user25 2017-04-15 20:13:21

相關問題