android 添加 MultiSelectListPreference

android adding MultiSelectListPreference

我正在尝试为我的设置屏幕实施 android 喷气背包首选项。 一切正常,当我点击 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 class 扩展 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>

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

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

现在进入第二个问题,要存储默认值(假设您希望默认选中第二项和第三项),请在 res_def_values 中使用 res_id_values。 不要像我一样使用 true/false 或 0/1

例如:如果在上面的问题中,如果我希望默认选中 apple 和 guava,那么我的 res_def_values 将如下所示:

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