ListPreference默认值未显示出来。

16

我尝试给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>

这是在arrays文件中:

<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>
3个回答

34

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


3
你节省了我数小时的时间。 - runkar
4
这可能是因为Android只会在一次设置默认值,详情请参见此链接 - Kenny Worden
真的,节省了很多调试时间。 - Amar Ilindra
@Seraphim,我知道这已经过时了,但是我该如何在不重新安装的情况下更改首选项?我希望已经从商店下载了应用程序的用户可以获得更改。 - Pointyhat

11

我发现,为了在首次显示偏好设置的默认值,我必须在偏好设置活动中调用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);
    }
}

2
在应用程序安装后,直到首次调用首选项活动之前,即使在xml中设置了android:defaultValue属性,对*sharedPreferences.getString(key, null)*的调用也将返回null。如果需要在应用程序首次调用首选项活动之前提供默认首选项值,则调用PreferenceManager.setDefaultValues()是一个很好的解决方案。 - pavel

2
index = listPreference.findIndexOfValue(listPreference.value)
listPreference.setValueIndex(index)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接