ListPreference默认值未显示

Ema*_*een 13 settings android default-value listpreference

我试图设置ListPreference的默认值,但没有显示任何内容.

你可以检查我的代码是否有任何错误?

谢谢.

真的,Emad

这是在settings.xml文件中:

<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>
Run Code Online (Sandbox Code Playgroud)

这是在数组文件中:

<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>
Run Code Online (Sandbox Code Playgroud)

Ser*_*m's 31

我发现有时我需要清除应用程序数据.卸载并重新安装该应用程序.在那之后,一切都按预期工作.

  • 这可能是由于Android仅一次**设置默认值的事实-参见[this](https://developer.android.com/reference/android/preference/PreferenceManager.html#setDefaultValues(android。 content.Context,%20int,%20boolean)) (3认同)
  • 你救了我几个小时的生命。 (2认同)

mic*_*h94 10

我发现我必须在我的Preferences Activity中调用PreferenceManager.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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这个答案+1.在应用程序安装后第一次调用首选项活动之前,即使在xml中设置*android:defaultValue*属性,对*sharedPreferences.getString(key,null)*的调用也将返回null.如果在首次在应用程序中调用首选项活动之前需要使用默认首选项值,那么PreferenceManager.setDefaultValues()调用是一个很好的解决方案. (2认同)