Android 什么';OnPreferenceChangeListener和OnSharedPreferenceChangeListener之间有什么不同

Android 什么';OnPreferenceChangeListener和OnSharedPreferenceChangeListener之间有什么不同,android,sharedpreferences,android-preferences,Android,Sharedpreferences,Android Preferences,我想获取checkboxpreference的值。哪种方法适合倾听偏好 OnPreferenceChangeListener和OnSharedPreferenceChangeListener的真正区别是什么 更新 为什么未调用onSharedPreferenceChanged public class Setting extends PreferenceActivity implements OnSharedPreferenceChangeListener // ,OnPrefe

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

这二者之间的区别在于,
onpreferencechangeelistener
是一个回调,仅当其首选项更改(应用于单个键)时才调用,而
OnSharedPreferenceChange
是一个回调,每当
SharedPreferences
对象中的任何首选项更改时调用(适用于所有钥匙)

因此,在您的情况下,您需要将
OnPreferenceChangeListener
复选框preference
一起使用

以下是一个例子:

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

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

如果您使用片段,则方法
findReference
不起作用,但您没有使用任何片段,因此它很好。

为什么不起作用?:@Override public void onSharedPreferenceChanged(SharedReferences SharedReferences,String key){if(key.equalsIgnoreCase(“myKey”)…什么不起作用?更改首选项时不会调用它?是否在包含此键的
SharedReferences
对象上调用它?请在问题中添加代码。它不会调用,因为(可能)“myPrefDB”不是您的首选项活动使用的名称。不,我认为您不需要在活动暂停时取消注册。毕竟,活动暂停时首选项不会更改,因为它仅在此活动中更改。。。