PreferencesActivity触发OnSharedPreferencesChange两次

时间:2015-12-17 11:36:57

标签: android

我有一个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毫秒。我怎样才能解决这个问题?这是错误的,因为我只更改了一次值,而且我收到了两次不应该发生的调用

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);
}