我正在尝试使用复选框控件创建首选项屏幕。
<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
:
您可以直接使用SharedPreferences
参数对象读取新值。如果您知道密钥来自CheckBoxPreference
,则可以读取值:
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;
}
});