【问题标题】:Dialog Preferences from my PreferenceActivity aren't being saved我的 PreferenceActivity 中的对话框首选项未保存
【发布时间】:2012-02-12 19:22:01
【问题描述】:

我有一堆 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);
    }

}

【问题讨论】:

    标签: android android-preferences preferenceactivity


    【解决方案1】:

    您需要在所有控件(EditTextPreferenceTimePickerPreference)中定义 android:key 以让框架自动保存值。

    因为你已经在 CheckBoxPreference 中定义了它,所以它会自动保存它。

    【讨论】:

    • 啊,有道理!现在一切似乎都在工作。谢谢!
    【解决方案2】:

    我遇到了同样的问题,PreferenceActivity 似乎正确地读取了首选项,但是在用户更改某些属性后我没有看到 myPreferences 的变化。在 PreferencesActivity 更新首选项后,在访问首选项之前,您只需要像这样重新创建 myPreferences:

    myPreferences=PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    

    ... 似乎两个首选项实例不同步(可能是因为它以某种方式被缓存)。一个实例中的更改不会出现在另一个实例中,尽​​管它们的名称相同(或者它们都是默认的共享首选项)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-06
      • 1970-01-01
      • 1970-01-01
      • 2016-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多