如何设置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); 

但它不起作用,因为它作为默认的首选。 你能解释一下如何使另一个默认? 谢谢。

你有没有尝试过:

 setValueIndex(int index); 

您不需要以编程方式处理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" /> 

在这里我select了2作为默认值。 记住defaultvalue将是opts_values元素。

对不起我英文不好。

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

码:

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

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

只是为了logging,如果别人有这个问题:

setValueIndex(int X)将@ index X的值设置为默认值 – 所以可能是你正在寻找的

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

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

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

这是一个旧的post,但这里有另一种方法来设置ListPreference的默认值与下面的代码行:

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

实际上,这是因为在重新构build应用程序之后,SharedPreferences将保持不变。 卸载它,然后重试。

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

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