android添加MultiSelectListPreference

时间:2019-05-05 17:56:29

标签: android android-preferences android-jetpack

我正在尝试为我的设置屏幕实现android jetpack首选项。 一切正常,当我单击MultiSelectListPreference时,它显示了条目列表,但是我有几个问题,

  1. 为什么entryValues不能是整数数组? (字符串数组工作正常)
  2. 如何设置默认值?例如:我想在开始时将第二个和第三个条目设置为默认检查。

这是我的pref.xml文件的一部分

...
app:entries="@array/res_entries"
app:entryValues="@array/res_id_values"
app:defaultValue="@array/res_def_values" //this line is not working
...

如果我在arrays.xml文件中将res_id_values设置为integer-array,则应用程序崩溃了。

我的settingsFragment类扩展了PreferenceFragmentCompat并覆盖了onCreatePreferences,并在其中编写了

setPreferencesFromResource(R.xml.pref.xml, rootkey)

编辑

我的res_entries数组:

<string-array name="res_entries">
  <item>apple</item>
  <item>Mango</item>
  <item>Guava</item>
</string-array>

我的res_id_values数组:

<string-array name="res_id_values">
  <item>1</item>
  <item>2</item>
  <item>12</item>
</string-array>

我的res_def_values数组:

<string-array name="res_def_values">
  <item>true</item>
  <item>false</item>
  <item>true</item>
</string-array>

1 个答案:

答案 0 :(得分:1)

所以最后,我解决了。 感谢@CommonsWare。

第一个问题的答案是,我们不能使用整数数组。使用字符串数组并在其中存储整数值。稍后获得它时,请使用Integer.parseInt()。

现在是第二个问题,要存储默认值(假设您要默认检查第二和第三项),请在res_def_values中使用res_id_values。 请勿像我一样使用true / false或0/1

例如:如果在上述问题中,如果我希望默认检查苹果和番石榴,那么我的res_def_values将如下所示:

<string-array name="res_def_values">
  <item>1</item>
  <item>12</item>
</string-array>