我需要在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);
但它不起作用,因为它使第一选择成为默认选择。你能解释一下如何制作另一个默认的吗?感谢。
答案 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)
抱歉我的英语不好。
<强>代码:强>
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>
是实际值,而不是字符串的索引 数组。
如果仍然无法正常工作,请尝试以下步骤。
奇怪,我知道,但是在我的情况下有效。