![](/img/trans.png)
[英]Cant set string default value for ListPreference android preferencescreen
[英]How to set the Default Value of a ListPreference
我需要在 Activity 启动时为 ListPreference 设置默认值。 我试过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);
但它不起作用,因为它将第一选择设为默认值。 你能解释一下如何将另一个设为默认值吗? 谢谢。
您不需要以编程方式处理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
元素。
你有没有尝试过:
setValueIndex(int index);
对不起我的英语不好。
代码:
ListPreference dataPref = (ListPreference) findPreference("keyList");
if(dataPref.getValue() == null){
dataPref.setValueIndex(0); //set to index of your deafult value
}
您可以使用这样的键来设置默认值
<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" />
或者你也可以试试colour.setValue(mycolour);
如果其他人有这个问题,仅供记录:
setValueIndex(int X)
正在将值setValueIndex(int X)
设置为默认值 - 所以它可能是你正在寻找的。
添加值后设置此值! (愚蠢的错误,但花了我半小时)
((ListPreference) findPreference("pref_language")).setValue(Locale
.getDefault().getLanguage());
setValue()
是 ListPreference 的方法, setDefaultvalue
是 Preference 的方法
实际上这是因为在您重新构建应用程序后 SharedPreferences 将持续存在。 卸载它并重试。
这是一篇旧帖子,但这是使用以下代码行设置ListPreference
的默认值的另一种方法:
PreferenceManager.setDefaultValues(getActivity(), R.xml.preferences, false);
使用列表标签中的 xml 属性android:defaultValue="<VALUE>"
来设置默认值。
注意:
<VALUE>
是实际值,而不是字符串数组的索引。
如果仍然无法正常工作,请尝试以下步骤。
奇怪,我知道,但它在我的情况下有效。
如果您使用的是 Android Jetpack Preference,在 Kotlin 中称为androidx.preference:preference-ktx:1.1.1
,您可以使用:
app:defaultValue="<Value_in_string-array_with_values>"
。
另外: defaultValue
不是索引号,是 values 数组中的实际值。
我还建议使用字符串资源作为默认值并清除数据、卸载应用程序或删除文件:
<package_name_in_app_manifest>_preferences.xml
在data/data/shared_prefs/<package_name_in_app_manifest>
中。 将<package_name_in_app_manifest>
替换为真实姓名,如com.example.yourapp
。 我遇到了同样的问题,并且defaultValue
没有更新,因为它已经有一个错误的默认值“true”。 通过使用 Android Studio 文件资源管理器并删除文件来解决它。
这是我的解决方案示例:
res/xml/root_preferences.xml
<ListPreference
app:key="mic"
app:title="@string/select_mic_title"
app:useSimpleSummaryProvider="true"
app:entries="@array/mic_entries"
app:entryValues="@array/mic_values"
app:defaultValue="@string/default_mic"
/>
res/values/arrays
<!-- Mic Preference -->
<string-array name="mic_entries">
<item>@string/default_mic</item>
<item>Headband</item>
</string-array>
<string-array name="mic_values">
<item>@string/default_mic</item>
<item>Headband</item>
</string-array>
res/strings.xml
<string name="default_mic">Integrated</string>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.