我正在尝试使用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方法。
如果我需要在每次更改价值时从共享偏好中获取价值,我应该这样做吗?
答案 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
的费用。