2011-09-08 16 views
10

ListPreferenceのデフォルト値を設定しようとしましたが、何も表示されませんでした。ListPreferenceのデフォルト値が表示されない

エラーのコードを確認できますか?

ありがとうございました。

本当に、 エマド

これは、settings.xmlファイルである:私はPreferenceManagerを呼び出すために有することを見出し

<resources> 

    <string-array name="chimeVolumeLabels"> 
    <item>Default</item> 
    <item>Soft</item> 
    <item>Medium</item> 
    <item>Loud</item> 
    </string-array> 

    <string-array name="chimeVolumeValues"> 
    <item>1</item> 
    <item>2</item> 
    <item>3</item> 
    <item>4</item> 
    </string-array> 
</resources> 

答えて

27

いつかアプリケーションデータを消去する必要があることがわかりました。アプリをアンインストールして再インストールします。その後、すべてが期待通りに機能します。

+0

あなたは私の人生の時間を節約しました。 – akashr

+0

奇妙な振る舞い、ありがとうございます – speedDeveloper

+1

これは、Androidがデフォルト値**を1回だけ設定するためです** ** [this](https://developer.android.com/reference/android/preference/PreferenceManager)を参照してください。 .html#setDefaultValues(android.content.Context、%20int、%20boolean)) –

10

<PreferenceCategory android:title="Media:"> 
    <CheckBoxPreference android:key="ChimeWhenMusicIsPlaying" 
     android:title="@string/ChimeWhenMusicIsPlayingTitle" android:summary="@string/ChimeWhenMusicIsPlayingSummary" 
     android:defaultValue="false" /> 

    <ListPreference android:title="Chime Volume" 
     android:key="ChimeVolume" android:summary="Select volume for the chiming sound." 
     android:entries="@array/chimeVolumeLabels" android:entryValues="@array/chimeVolumeValues" 
     android:defaultValue="1" /> 

</PreferenceCategory> 

これは、配列ファイルでありますデフォルトの値が最初に表示されるようにするには、Preferencesアクティビティで.setDefaultValues()を使用します。

public class PreferencesActivity extends PreferenceActivity { 

    @Override 
    protected void onCreate (Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // This static call will reset default values only on the first ever read 
     PreferenceManager.setDefaultValues(getBaseContext(), R.xml.settings, false); 

     addPreferencesFromResource(R.xml.settings); 
    } 
} 
+2

+1この回答にはアプリケーションのインストール後に初めてプリファレンス・アクティビティーが呼び出されるまで、* android:defaultValue *属性がxmlに設定されていても、* sharedPreferences.getString(key、null)*の呼び出しはnullを戻します。プリファレンスアクティビティーが初めてアプリケーションで呼び出される前に、デフォルトのプリファレンス値を使用可能にする必要がある場合は、PreferenceManager.setDefaultValues()コールが優れた解決策です。 – pavel

関連する問題