我有一个Preference Activity,它以下列方式实现更改的首选项侦听器:
public class PreferencesActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
PreferenceManager
.getDefaultSharedPreferences(getApplicationContext())
.registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onDestroy(){
super.onDestroy();
PreferenceManager
.getDefaultSharedPreferences(getApplicationContext())
.unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
Log.d("TAG", "preference " + key + " changed");
}
}
当我更改首选项的值时,触发器被触发两次,我不明白为什么。根据文档,只有在新值保持不变时才应触发。 这是我的日志:
12-17 13:31:24.434 27391-27391/xxx D/> TAG: preference ABC
12-17 13:31:24.435 27391-27391/xxx D/> TAG: preference ABC
听众被触发的两次之间有1毫秒。我怎样才能解决这个问题?这是错误的,因为我只更改了一次值,而且我收到了两次不应该发生的调用
答案 0 :(得分:0)
发现问题所以我没有删除问题,而是回答问题。 听众必须在不同的位置注册:
@Override
public void onResume(){
super.onResume();
PreferenceManager
.getDefaultSharedPreferences(getApplicationContext())
.registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause(){
super.onPause();
PreferenceManager
.getDefaultSharedPreferences(getApplicationContext())
.unregisterOnSharedPreferenceChangeListener(this);
}