OnPreferenceChangeListener和OnSharedPreferenceChangeListener之间有什么不同

Dr.*_*cky 11 android android-preferences sharedpreferences

我想得到一个checkboxpreference的值.哪种方法适合倾听偏好?

OnPreferenceChangeListener和OnSharedPreferenceChangeListener之间有什么区别?

更新 为什么没有调用onSharedPreferenceChanged?

public class Setting extends PreferenceActivity implements
        OnSharedPreferenceChangeListener // ,OnPreferenceChangeListener
{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);// deprecated warning
    }

    @Override
    public void onSharedPreferenceChanged(
            SharedPreferences sharedPreferences, String key) {// DO Stuff
    }

    @Override
    protected void onResume() {
        super.onResume();
        // getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
        // PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this);
        this.getSharedPreferences("myPrefDB", MODE_PRIVATE)
                .registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    protected void onPause() {
        super.onPause();
        // getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
        // PreferenceManager.getDefaultSharedPreferences(this).unregisterOnSharedPreferenceChangeListener(this);
        this.getSharedPreferences("myPrefDB", MODE_PRIVATE)
                .unregisterOnSharedPreferenceChangeListener(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*ong 14

这些2之间的区别在于,OnPreferenceChangeListener是一种称为回调只有当其偏好的变化(适用于单个密钥),而OnSharedPreferenceChange是被称为每当回调任何在于所述偏好的SharedPreferences对象改变(适用于所有的键).

所以,在你的情况下,你需要使用OnPreferenceChangeListener你的CheckBoxPreference.

这是一个例子:

Preference ckboxPref = this.findPreference(CKBOX_PREF_KEY);
ckboxPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {

    @Override
    public boolean onPreferenceChange(Preference preference,
            Object newValue) {
        //Do stuff
    }
});
Run Code Online (Sandbox Code Playgroud)

findPreference如果您使用片段,该方法不起作用,但您没有使用任何片段,因此它很好.

  • 不,我认为活动暂停后无需注销。毕竟,暂停活动后,偏好设置不会更改,因为仅在此活动中更改了偏好设置... (2认同)