更改时从CheckBoxPreference获取值

时间:2011-11-06 13:53:52

标签: android sharedpreferences

我正在尝试使用Checkbox控件创建Preference Screen。

 <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();
}
即使我在pref屏幕中切换复选框,也没有调用onSharedPreferenceChanged方法。

如果我需要在每次更改价值时从共享偏好中获取价值,我应该这样做吗?

3 个答案:

答案 0 :(得分:2)

而不是使用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;
    }
};

答案 1 :(得分:1)

SwitchPreference switchPref = (SwitchPreference)findPreference("switchPref");
switchPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        boolean beforeChange = ((SwitchPreference) preference).isChecked();
        boolean afterChange = !beforeChange;
        ((SwitchPreference) preference).setChecked(afterChange);
        // Toast.makeText(getContext(), ""+afterChange, Toast.LENGTH_SHORT).show();
        return false;
    }
});

如果您覆盖onPreferenceChange(),则在单击开关时,选中状态不会更改。

别忘了添加switchPref.setChecked(!isChecked()).

答案 2 :(得分:0)

您可以使用SharedPreferences参数对象直接读取新值。如果您知道密钥来自CheckBoxPreference,则可以只读取值:

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {

    if (key == getString(R.string.CheckBoxKeyId)) {
        boolean myBool = sharedPreferences.getBoolean(key, false);
        // do stuff
    }
}

这可以节省您为OnPreferenceChangeListener添加CheckBoxPreference的费用。