我正在使用Eclipse的默认"设置屏幕" Activity,它创建了一个扩展PreferenceScreen的类。用于获取值的方法对我来说似乎很奇怪,但我正在使用它们。我可以通过这种方式获得EditTextPreference的值:
}else if(preference instanceof EditTextPreference) {
preference = (EditTextPreference) preference;
int p_value = Integer.valueOf(((EditTextPreference) preference).getText());
MainActivity.decimals = p_value;
这适用于EditTextPreference和ListPreference。但是,在使用CheckBoxPreference尝试它时,如下所示:
}else if(preference instanceof CheckBoxPreference) {
preference = (CheckBoxPreference) preference;
boolean toastEn = ((CheckBoxPreference) preference).isChecked();
if(toastEn) {
MainActivity.toastsEnabled = true;
}else MainActivity.toastsEnabled = false;
}
它不起作用。从我设法做的少量调试(Toasts和Logs在这种方法中看起来非常有限),看起来它只是没有得到CheckBoxPreference的值。
我正确地解决了这个问题吗?
编辑:封装方法看起来像这样(我忘了先添加它,对不起,这可能很重要):
private static Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object value) {
答案 0 :(得分:0)
您可以尝试在setOnPreferenceChangeListener or setOnPreferenceClickListener
等复选框中添加一个监听器答案 1 :(得分:0)
这是非常奇怪的首选项代码。
我为偏好做的是以下内容:
public class SettingsActivity extends PreferenceActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
res \ xml \ preferences.xml看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<CheckBoxPreference
android:defaultValue="true"
android:key="MusicEnabled"
android:title="@string/musicenabled"
/>
<CheckBoxPreference
android:defaultValue="true"
android:key="SoundEnabled"
android:title="@string/soundenabled"
/>
<CheckBoxPreference
android:defaultValue="true"
android:key="IntroEnabled"
android:title="@string/introsoundenabled"
/>
</PreferenceScreen>
您可以使用以下代码获取其值:
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
soundEnabled = sp.getBoolean("SoundEnabled", false);