我有一堆EditTextPreferences和一个TimePickerPrefernce(我创建的)以及一个CheckBoxPreference,并且没有保存EditTextPreference或TimePickerPreference,但是CheckBox有。我认为这可能是因为我在PreferenceActivity子类中的最低限度,但看到如何保存复选框,我不确定是不是。
我已经搜遍了所有内容,似乎所有内容似乎都会自动保存首选项,但我找不到任何原因。
这是我的偏好xml文件:
<PreferenceCategory android:title="@string/settings_general_header" >
<EditTextPreference
android:defaultValue="15"
android:summary="@string/settings_time_to_sleep"
android:title="@string/settings_time_to_sleep_title"
android:numeric="integer" />
<EditTextPreference
android:defaultValue="90"
android:summary="@string/settings_sleep_cycle_time_summary"
android:title="@string/settings_sleep_cycle_minutes"
android:numeric="integer" />
<EditTextPreference
android:defaultValue="5"
android:summary="@string/how_many_results"
android:title="@string/settings_results_to_show_title"
android:numeric="integer" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/wakeupat_settings_header" >
<CheckBoxPreference
android:key="@string/save_wakeupat_time"
android:title="@string/save_wakeupat_time" android:defaultValue="false"/>
<TimePickerPreference
android:dependency="@string/save_wakeupat_time"
android:title="@string/wakeupat_preferred_time" />
</PreferenceCategory>
这是我的PreferenceActivity子类:
package com.krej.timeforbed;
import java.util.List;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.util.Log;
import android.widget.Button;
public class Settings extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
}
}
答案 0 :(得分:4)
您需要在所有控件中定义android:key
( EditTextPreference 和 TimePickerPreference ),让框架自动保存值。
因为你已经在 CheckBoxPreference 中定义了它,所以它会自动保存它。
答案 1 :(得分:0)
我遇到了同样的问题,PreferenceActivity似乎正确地读取了偏好,但是在用户更改了某些属性之后我没有看到myPreferences的变化。在PreferencesActivity更新首选项之前,您需要的只是重新创建myPreferences,如下所示:
myPreferences=PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
......似乎两个首选项实例不同步(可能是因为它以某种方式缓存)。一个实例中的更改不会出现在另一个实例中,尽管它们都是相同的名称(或者它们都是默认的共享优先级)。