11

我想获得复选框首选项的值。哪种方法适合听偏好?

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

1 回答 1

14

这两者之间的区别在于,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
    }
});

如果您使用片段,则该方法findPreference不起作用,但您没有使用任何片段,所以没关系。

于 2012-11-10T11:43:50.270 回答