如何设置列表首选项的默认值

我需要在活动开始时为ListPreference设置defult值。我已经尝试过,但它使列表的第一个条目成为默认值。我需要它,因为我必须检查一个条件并将满足该条件的值设置为默认值,所以我认为它不能从xml文件中完成(使用ListPreference.setDefaultvalue("value");android:defaultValue)

例如,假设我在数组中有这个值数组.xml:

<string-array name="opts">
    <item>red</item>
    <item>green</item>
    <item>blue</item>
</string-array>

<string-array name="opts_values">
    <item>1</item>
    <item>2</item>
    <item>3</item>
</string-array>

在首选项屏幕 xml 中:

<ListPreference
    android:title="Colour select"
    android:summary="Select your favourite"
    android:key="colour"
    android:entries="@array/opts"
    android:entryValues="@array/opts_values" />

在活动中,我想做这样的事情:

String mycolour;
if (something) {
    mycolour="1";
} else {
    mycolour="2";
}
ListPreference colour = (ListPreference) findPreference ("colour");
colour.setDefaultValue(mycolour);

但它不起作用,因为它使第一个选择成为默认值。你能解释一下如何使另一个默认吗?谢谢。


答案 1

您无需以编程方式处理缺省值 。您可以在 xml 设置文件中执行此操作。下面是一个示例ListPreferences

<string-array name="opts">
    <item>red</item>
    <item>green</item>
    <item>blue</item>
</string-array>

<string-array name="opts_values">
    <item>1</item>
    <item>2</item>
    <item>3</item>
</string-array>

...

<ListPreference
    android:title="Colour select"
    android:summary="Select your favourite"
    android:key="colour"
    android:entries="@array/opts"
    android:entryValues="@array/opts_values"
    android:defaultValue="2" />

在这里,我选择作为默认值。记住将是元素。2defaultvalueopts_values


答案 2

您是否尝试过:

setValueIndex(int index);

推荐