因此,对于我的应用,我正在尝试允许用户更改机器人的默认速度。要做到这一点,我使用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个状态,无论是真还是假。