我正在尝试使用复选框控件创建首选项屏幕。

 <CheckBoxPreference android:summaryOn="@string/mySummaryOn"
  android:summaryOff="@string/mySummaryOff"
  android:key="myCB"
  android:title="my checkbox"/>


我想在更改布尔值时获取它。

在我的应用程序中,我完成了以下实现OnSharedPreferenceChangeListener的操作

public boolean cbValue;
 @Override
    public void onCreate() {
        // The following line triggers the initialization of ACRA
        ACRA.init(this);
        prefs=PreferenceManager.getDefaultSharedPreferences(this);
        prefs.registerOnSharedPreferenceChangeListener(this);
        super.onCreate();
    }

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
        String key) {
    // TODO Auto-generated method stub
    //FacebookStatus=prefs.getBoolean("myCB", true);
    Toast.makeText(getBaseContext(), "Shared Preference Changes ",Toast.LENGTH_LONG ).show();
}


即使我在偏好屏幕中切换复选框时,也根本不会调用onSharedPreferenceChanged方法。

如果每次更改值时都需要从“共享”偏好中获取价值,我应该怎么做?

最佳答案

代替使用OnSharedPreferenceChangeListener

将以下行添加到您的首选项活动的onCreate方法中:Preference myCheckbox = findPreference("myCB")
然后将侦听器应用于myCheckbox对象:myCheckbox.setOnPreferenceChangeListener(myCheckboxListener)

侦听器的代码(作为类字段):

private OnPreferenceChangeListener myCheckboxListener = new OnPreferenceChangeListener() {

    public boolean onPreferenceChange(Preference preference, Object newValue) {
        // Read new value from Object newValue here
        return true;
    }
};

09-15 16:32