2010-02-10 61 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

相关问题