如何设置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
元素。
对不起我英文不好。
- 项目清单
- 检索列表检查值是否为空。 如果它为空,则设置为默认值。
码:
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" />