OnPreferenceChangeListener

OnPreferenceChangeListener

我想获取一个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);
    }
}

最佳答案

这2个之间的区别在于OnPreferenceChangeListener仅在其首选项更改时(适用于单个键)才是称为的回调,而OnSharedPreferenceChange是每当SharedPreferences对象的首选项中的任何更改时都调用的回调(适用于所有键) )。

因此,在您的情况下,您需要将OnPreferenceChangeListenerCheckBoxPreference一起使用。

这是一个例子:

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

    @Override
    public boolean onPreferenceChange(Preference preference,
            Object newValue) {
        //Do stuff
    }
});

如果您使用 fragment ,则findPreference方法不起作用,但是您没有使用任何 fragment ,因此很好。

关于android - OnPreferenceChangeListener和OnSharedPreferenceChangeListener之间有什么区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13321637/

10-10 00:54