如何设置ListPreference的默认值

时间:2011-03-04 17:34:32

标签: java android android-preferences preference listpreference

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

例如,假设我在arrays.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>

在PreferenceScreen 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);

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

10 个答案:

答案 0 :(得分:94)

您无需以编程方式处理ListPreferences的默认值。您可以在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>


 <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" />

这里我选择了2作为默认值。请注意,defaultvalue将是opts_values元素。

答案 1 :(得分:27)

你试过了吗?

setValueIndex(int index);

答案 2 :(得分:8)

抱歉我的英语不好。

  1. 列表项
  2. 检索列表检查值是否为null。如果为null,则设置为默认值。
  3. <强>代码:

    ListPreference dataPref = (ListPreference) findPreference("keyList");
    
    if(dataPref.getValue() == null){
        dataPref.setValueIndex(0); //set to index of your deafult value
    }
    

答案 3 :(得分:3)

或者您也可以尝试colour.setValue(mycolour);

答案 4 :(得分:3)

只是为了记录其他人是否有此问题:

setValueIndex(int X)正在将值@ index X设置为默认值 - 因此 可能您要查找的内容

设置此值 AFTER 您添加了值! (愚蠢的错误,但花了我半个小时)

答案 5 :(得分:2)

((ListPreference) findPreference("pref_language")).setValue(Locale
                .getDefault().getLanguage());

setValue()是ListPreference的方法,setDefaultvalue是Preference的方法

答案 6 :(得分:1)

实际上是因为在重新构建应用程序后,SharedPreferences会持续存在。 卸载它然后重试。

答案 7 :(得分:1)

这是一篇旧帖子,但这是使用以下代码行设置ListPreference默认值的另一种方法:

PreferenceManager.setDefaultValues(getActivity(), R.xml.preferences, false);

答案 8 :(得分:1)

您可以使用此键

设置默认值
<dependencies>
​  <dependency>
​      <groupId>my-group</groupId>
​      <artifactId>my-service-api</artifactId>
​  </dependency>
​  
​  <dependency>
​      <groupId>my-group</groupId>
​      <artifactId>my-service-impl</artifactId>    ​  
​  </dependency>
<dependencies>

答案 9 :(得分:0)

使用列表标记中的xml属性android:defaultValue="<VALUE>"设置默认值。

  

注意:<VALUE>是实际值,而不是字符串的索引   数组。

如果仍然无法正常工作,请尝试以下步骤。

  • 清除应用程序数据。
  • 卸载并重新安装该应用程序
  • 检查列表首选项,您将看到选择的默认值

奇怪,我知道,但是在我的情况下有效。