CheckBoxPreference仅返回默认值

时间:2015-12-12 02:11:03

标签: android android-fragments sharedpreferences android-preferences

因此,对于我的应用,我正在尝试允许用户更改机器人的默认速度。要做到这一点,我使用CheckBoxPreference 这是我的preferences.xml

    <?xml version="1.0" encoding="utf-8"?>
    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
        <PreferenceCategory
            android:title="@string/prefsect_polling"
            android:summary="@string/prefsect_pollingSummary">



            <CheckBoxPreference
                android:key="batteryCheckBox"
                android:title="@string/pref_battery"
                android:summary="@string/pref_batterySummary"
                android:defaultValue="false" />

            <ListPreference
                android:key="timeIntervalListPref"
                android:title="@string/pref_interval"
                android:summary="@string/pref_intervalSummary"
                android:entries="@array/timeIntervalArray"
                android:entryValues="@array/timeIntervalArrayValues"/>

        </PreferenceCategory>

        <PreferenceCategory
            android:title="@string/prefsect_servo"
            android:summary="@string/prefsect_servoSummary">

            <CheckBoxPreference
                android:key="speedCheckbox"
                android:title="@string/pref_speed"
                android:summary="@string/pref_speedSummary"
                android:defaultValue="false" />

        </PreferenceCategory>

    </PreferenceScreen>

当我将我的首选项加载到我的ViewPager中的一个片段中时,我使用了这行代码 SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(getActivity().getBaseContext());

要开始我的PreferencesActivity,我会使用这个由菜单项按

触发的意图
    Intent intent = new Intent(this,EditPreferences.class);
    startActivity(intent);

我像这样设置了EditPrefences Activity

    public class EditPreferences extends PreferenceActivity{

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            getFragmentManager().beginTransaction().replace(android.R.id.content, new MyPreferenceFragment()).commit();
            PreferenceManager.setDefaultValues(this,R.xml.preferences,false);
        }

        public static class MyPreferenceFragment extends PreferenceFragment{
            @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                addPreferencesFromResource(R.xml.preferences);
            }
        }

        @Override
        public void onBackPressed() {
            super.onBackPressed();
        }
    }

尝试阅读CheckBoxPreference时,我使用OnResume

中包含的Fragment方法
@Override
public void onResume() {
    super.onResume();
    SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(getActivity().getBaseContext());
    boolean defaultSpeed = pref.getBoolean("speedCheckBox",false);
    if(defaultSpeed){
        powerControl.setProgress(100);
    }
    else{
        powerControl.setProgress(75);
    }
}

当我去阅读我的应用程序的首选项时,我的问题正在发生。他们在我的应用中正确保存和阅读。我可以打开我的首选项活动,它会显示以前的值。当我调用boolean speedDefault = pref.getBoolean("speedCheckBox",false);时它只返回默认值。当我进入调试器并查看mMap时,它显示了speedCheckBox的正确值,但由于某种原因,我无法弄清楚为什么它没有读取正确的值。

编辑:我选择使用EditTextPreference,因为它可以让用户获得更多的自由,但是我想让这个问题保持开放,因为其他人可能遇到这样的问题,因为有人可以帮助解决这个问题出。要访问我使用EditTextPreference的{​​{1}}和ListPreference的偏好设置,这会返回这些首选项的正确结果。仍然不确定为什么pref.getString("PreferenceName","defaultStringValue");没有为getBoolean返回正确的值,因为它只会有2个状态,无论是真还是假。

0 个答案:

没有答案