在PreferenceScreen中没有从CheckBoxPreference接收值?

时间:2014-06-04 04:39:01

标签: java android

我正在使用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) {

2 个答案:

答案 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);