如何设置ListPreference的默认值

Gnu*_*bio 50 java android preference android-preferences 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>
Run Code Online (Sandbox Code Playgroud)

在PreferenceScreen xml中:

<ListPreference
    android:title="Colour select"
    android:summary="Select your favourite"
    android:key="colour"
    android:entries="@array/opts"
    android:entryValues="@array/opts_values" />
Run Code Online (Sandbox Code Playgroud)

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

String mycolour;
if (something) {
    mycolour="1";
} else {
    mycolour="2";
}
ListPreference colour = (ListPreference) findPreference ("colour");
colour.setDefaultValue(mycolour);
Run Code Online (Sandbox Code Playgroud)

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

Md.*_*lam 97

您不需要以编程方式处理默认值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" />
Run Code Online (Sandbox Code Playgroud)

在这里我选择2了默认值.记住defaultvalue将是opts_values元素.

  • 这种方法对我不起作用. (5认同)
  • 请注意,在 XML 中,第一个选项从索引 1(即`android:defaultValue="1"`)而不是 0 开始。 (3认同)
  • 如果opts_values是整数数组怎么办?或者这是一个坏主意? (2认同)

bid*_*h.r 27

你有没有尝试过:

setValueIndex(int index);
Run Code Online (Sandbox Code Playgroud)

  • 我不确定这是正确的解决方案,因为即使用户已经提供了存储在首选项中的自定义值,setValue或setValueIndex也会有效地设置该值.对我有用的是`if(colour.getValue()== null){colour.setValue(mycolour); }` (43认同)

小智 8

抱歉,我的英语不好.

  1. 项目清单
  2. 检索列表检查值是否为null.如果为null,则设置为默认值.

码:

ListPreference dataPref = (ListPreference) findPreference("keyList");

if(dataPref.getValue() == null){
    dataPref.setValueIndex(0); //set to index of your deafult value
}
Run Code Online (Sandbox Code Playgroud)


pav*_*vel 5

您可以使用这样的键设置默认值

<string-array name="syncFrequency">
    <item name="1">Block All Calls</item>
    <item name="2">Block Black List</item>
    <item name="3">Block Unknown Calls</item>
    <item name="4">Allow White List</item>
    <item name="5">Receive All Calls</item>
</string-array>




<string-array name="syncFrequencyValues">
    <item name="1">Block_All_Calls</item>
    <item name="2">Block_Black_List</item>
    <item name="3">Block_Unknown_Calls</item>
    <item name="4">Allow_White_List</item>
    <item name="5">Receive_All_Calls</item>
</string-array>



     <ListPreference
        android:key="prefSyncFrequency"
        android:entries="@array/syncFrequency"
        android:summary="%s"
        android:defaultValue="Block_Black_List"
        android:entryValues="@array/syncFrequencyValues"
        android:title="@string/call_block_options" />
Run Code Online (Sandbox Code Playgroud)