android添加了MultiSelectListPreference

android添加了MultiSelectListPreference,android,android-preferences,android-jetpack,Android,Android Preferences,Android Jetpack,我正在尝试为我的设置屏幕实现android jetpack首选项。 一切正常,当我点击MultiSelectListPreference时,它会显示条目列表,但我有几个问题 为什么entryValues不能是整数数组?(字符串数组工作正常) 如何设置默认值?例如:我想在开始时设置默认选中的第二个和第三个条目 这是我的pref.xml文件的一部分 ... app:entries="@array/res_entries" app:entryValues="@array/res_id_values"

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


  • 为什么entryValues不能是整数数组?(字符串数组工作正常)
  • 如何设置默认值?例如:我想在开始时设置默认选中的第二个和第三个条目 这是我的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\u id\u值设置为
    整数数组
    ,则应用程序将崩溃

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

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

    我的
    res\u条目
    数组:

    <string-array name="res_entries">
      <item>apple</item>
      <item>Mango</item>
      <item>Guava</item>
    </string-array>
    
    <string-array name="res_id_values">
      <item>1</item>
      <item>2</item>
      <item>12</item>
    </string-array>
    
    <string-array name="res_def_values">
      <item>true</item>
      <item>false</item>
      <item>true</item>
    </string-array>
    
    我的
    res_def_值
    数组:

    <string-array name="res_entries">
      <item>apple</item>
      <item>Mango</item>
      <item>Guava</item>
    </string-array>
    
    <string-array name="res_id_values">
      <item>1</item>
      <item>2</item>
      <item>12</item>
    </string-array>
    
    <string-array name="res_def_values">
      <item>true</item>
      <item>false</item>
      <item>true</item>
    </string-array>
    
    
    真的
    假的
    真的
    
    最后,我解决了这个问题。 这一切都要感谢@commonware

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

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

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

    <string-array name="res_def_values">
      <item>1</item>
      <item>12</item>
    </string-array>
    
    
    1.
    12
    
    “为什么entryValues不能是整数数组?”--因为数组资源是键入的,它需要的是
    字符串[]
    ,而不是
    int[]
    整数[]
    。另外,保存的值是
    Set
    ,而不是
    Set
    @commonware,以及如何通过xml设置默认值?如果我阅读正确,请使用
    android:defaultValue
    ,并将其指向另一个
    资源。我已经尝试过这样做,但不起作用。我这样做了``true false``这些字符串是否与
    res\u id\u值
    数组中的字符串匹配?