You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 10及以上版本应用设置中实现多选列表的推荐方案是什么?

API 29及以上实现多选偏好设置的推荐方案

Android系统框架层的MultiSelectListPreference随整个android.preference包在API 29被废弃后,官方推荐的统一替代方案是使用Jetpack Preferences库中的同名控件,该库控件不受系统API版本限制,向下可兼容至API 14,同时默认符合Material Design设计规范,完全匹配多选新闻源的设置场景。

具体实现步骤如下:

  • 第一步:引入Jetpack Preferences依赖
    在模块级build.gradle的依赖块中添加如下配置即可:
    Kotlin项目引入ktx版本:
implementation "androidx.preference:preference-ktx:1.2.1"

Java项目引入基础版本:

implementation "androidx.preference:preference:1.2.1"
  • 第二步:添加多选偏好配置项
    在你的偏好设置XML文件中直接声明MultiSelectListPreference控件:
<androidx.preference.MultiSelectListPreference
    app:key="selected_rss_feeds"
    app:title="订阅新闻源"
    app:summary="已选择 %s 个源"
    app:entries="@array/rss_feed_display_names"
    app:entryValues="@array/rss_feed_values"
    app:useSimpleSummaryProvider="true" />

其中entries配置要展示给用户的新闻源名称数组,entryValues配置对应存入SharedPreferences的标识值,开启useSimpleSummaryProvider后会自动在设置项副标题展示已选数量,完全符合Material Design的设置项设计要求。

  • 第三步:读取用户选择结果
    该控件默认将选中结果以Set<String>类型存入默认SharedPreferences,读取逻辑如下:
    Kotlin示例:
val prefs = PreferenceManager.getDefaultSharedPreferences(context)
// 第二个参数为未选择时的默认返回值
val selectedFeeds = prefs.getStringSet("selected_rss_feeds", emptySet())

Java示例:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
Set<String> selectedFeeds = prefs.getStringSet("selected_rss_feeds", new HashSet<>());

如果需要自定义弹窗样式、选中逻辑等,也可以通过继承MultiSelectListPreference重写对应方法实现,原有针对框架层控件的逻辑几乎不需要调整即可直接迁移。

内容的提问来源于stack exchange,提问作者pakkuthebeaver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 17:45:05