2012-02-12 51 views
0

我有一堆EditTextPreferences和一個TimePickerPrefernce(我創建的)以及一個CheckBoxPreference,並且EditTextPreference或TimePickerPreference都沒有保存,但CheckBox確實如此。我認爲這可能是因爲我在PreferenceActivity子類中的最低限度,但看到複選框被保存的方式,我不確定是否是這樣。我的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); 
    } 

} 

回答

4

你需要在所有控件定義android:keyEditTextPreferenceTimePickerPreference)讓框架自動保存值。

而且由於您已經在CheckBoxPreference中定義了它,所以它會自動保存它。

+0

啊,這很有道理!現在一切似乎都在起作用。謝謝! – krej 2012-02-12 21:18:35

0

我有同樣的問題,PreferenceActivity似乎正確地讀取首選項,但在用戶更改某些屬性後,我沒有看到myPreferences中的更改。所有你訪問的喜好,才由PreferencesActivity更新後,你需要的是重新創建這樣的myPreferences:

myPreferences=PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 

...看來,這偏好兩種情況不同步的(可能是因爲它是某種緩存) 。一個實例中的更改不會出現在另一個實例中,盡​​管它們都是相同的名稱(或者它們都是默認的共享預置)。