2

當我推送它時,該值在SharedPreference中保存得很好,但當我再次打開PreferenceActivity時,它不顯示。 它運行時,如果我不把android:entryValues,但我不能使用它,因爲使用不同的語言有一些差異,以查看預設的價值是什麼。偏好活動錯誤:關閉後沒有顯示選定的選項活動

¿我該怎麼做?

感謝您的閱讀。

代碼:

的PreferencesMenu 活動

public class PreferencesMenu extends PreferenceActivity 
{ 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setDefaultKeyMode(MODE_PRIVATE); 

    addPreferencesFromResource(R.layout.preferences); 
    getPreferenceManager().setSharedPreferencesName("Gat_Preferences"); 

} 
} 

一些的strings.xml的:

<string-array name="menu_preference_general_order_array"> 
     <item>Default</item> 
     <item>Alphabetical</item> 
    </string-array>  
    <string-array name="menu_preference_general_order_values"> 
     <item>default</item> 
     <item>alphabetical</item> 
    </string-array> 

的preferences.xml 佈局

<?xml version="1.0" encoding="utf-8"?> 
    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > 
    ... 
<PreferenceCategory android:title="@string/menu_preference_general"> 
    <ListPreference 
     android:key="list_order" 
     android:persistent="true" 
     android:title="@string/menu_preference_general_order_title" 
     android:summary="@string/menu_preference_general_order_description" 
     android:entries="@array/menu_preference_general_order_array" 
     android:entryValues="@array/menu_preference_general_order_values"/> 
    </PreferenceCategory> 
</PreferenceScreen> 

MOD

我使用Android 2.1,我不能使用新的片段偏好。

回答

0

你需要告訴首選項API你要使用的文件名稱之前加載一切。

取而代之的是:

addPreferencesFromResource(R.layout.preferences); 
getPreferenceManager().setSharedPreferencesName("Gat_Preferences"); 

這樣做:

getPreferenceManager().setSharedPreferencesName("Gat_Preferences"); 
addPreferencesFromResource(R.layout.preferences); 

在一個旁註,不要使用R.layout.preferences。您應該使用R.xml.preferences,將該文件放在/res/xml下,而不是在/res/layout下。它可以按照自己的方式工作,但不能保證適用於所有API版本,因爲它不是使用首選項XML文件的默認方式。

+0

在側面注意,我不會亂用文件名稱。除非你有理由,並且我告訴你我從來沒有這麼做過,最好是調用PreferenceManager來獲取默認的SharedPreferences並讓API工作。您在不同的類之間抽象文件名,從而避免了潛在的錯誤來源(拼寫錯誤等)。關於你的佈局vs xml問題,我在1.5測試了它,它工作。但我仍然建議你把它放在正確的地方。 – davidcesarino

+0

感謝您的夢幻般的答案(它運行完美)。我會嘗試你所說的關於不使用標籤的偏好,我不知道R.xml.preferences,但無論如何感謝。你從哪裏看到這些東西? API可能?一本書? –

+0

經驗:-)和API。 – davidcesarino

0

您的preferences.xml應該在res/xml。 此外,你應該指定默認值

<ListPreference 
    android:key="list_order" 
    android:persistent="true" 
    android:title="@string/menu_preference_general_order_title" 
    android:summary="@string/menu_preference_general_order_description" 
    android:entries="@array/menu_preference_general_order_array" 
    android:entryValues="@array/menu_preference_general_order_values" 
    android:defaultValue="default" 
    /> 
+0

再次,就像我以前說過的那樣,問題也不是這樣。首先,您不需要將prefs XML文件放在/ res/xml下。它*從*/res/layout加載*就好了。當然,這不是一個好的做法,有可能它會在某個地方突然崩潰。但是,對於他的有限示例和問題,由於add命令加載XML本身,並且只要您提供正確的路徑(R.layout),就會期望有效的XML文件,因此它在佈局上工作良好。放置在適當的地方是一種好習慣,而不是他的解決方案。 – davidcesarino

+0

關於默認值,它仍然不能解決他的問題。通過提供默認值,每次重新啓動應用程序時,都會替換原來的問題---空白選擇器---帶有另一個問題:每次他重新啓動應用程序時,總是提供默認值。要了解它如何失敗,只需使用您的解決方案選擇「按字母排序」選項。下次,該應用將顯示「默認」。我在回答中解釋的原因是:當您提供此默認值時,該默認值將寫入默認的prefs文件(/ data/data/packagename下的packagename_preferences.xml)。 – davidcesarino

+0

當他在設置自定義文件名之前添加首選項時,首選項將從默認值加載。但是,當他將pref文件設置爲該自定義文件時,所有用戶更改都將寫入該自定義prefs文件,因此用戶始終會在默認prefs文件中看到默認值,但始終會將值設置爲自定義prefs文件。正如我所說的,解決方案是將調用轉換爲自定義首選項文件,並在其中添加來自資源的首選項。 – davidcesarino