【问题标题】:Multi select ListPreference on androidandroid上的多选ListPreference
【发布时间】:2026-02-06 01:25:01
【问题描述】:

关于在 Android 上实现多选(复选框)ListPreference 有什么想法吗?

我必须扩展 ListPreference 吗?
是否有任何已记录的类可以执行此操作?

谢谢

【问题讨论】:

    标签: android android-preferences listpreference


    【解决方案1】:

    多选 ListPreference 现在从 API 级别 11 (Honeycomb) 原生地与 Android 一起提供。 http://developer.android.com/reference/android/preference/MultiSelectListPreference.html

    因为设备需要很长时间才能安装 Honeycomb 或更高版本,所以我建议人们坚持使用 http://blog.350nice.com/wp/archives/240 解决方案。

    编辑:我认为此时此刻(最初发布此答案大约 3 年后)您最好现在使用本机版本,因为大多数设备都装有 Android 4 及更高版本。

    【讨论】:

    • 谢谢!这是最好的答案。
    • 包括我自己在内的许多开发人员不希望通过将 minSdkVersion 从 10 增加到 11 来锁定仍然重要的用户群。我不明白所有这些解决方案的需求是什么,在其他答案中发布的 github 项目等?我们是否没有忘记 Android 是开源的。如果您想针对 API 10+,只需获取 MultiSelectListPreference 的实际源代码并完成它,例如android.googlesource.com/platform/frameworks/base/+/cd92588/…
    【解决方案2】:

    有一个github project 就是为了这个

    【讨论】:

      【解决方案3】:

      【讨论】:

      • 效果很好。我会将此方法添加到代码中,这样您就不需要导入它: public static boolean isEmpty(CharSequence str) { return str == null || str.length() == 0; }
      【解决方案4】:

      好吧,http://blog.350nice.com/wp/archives/240 确实提供了一个解决方案,但更简单的解决方案是在父级内部实现一个子偏好屏幕,然后子偏好屏幕可以有多个复选框。我知道,这不是最好的解决方案,但可以完成工作。

      例如 - 下面的preference.xml

      <PreferenceCategory 
          android:title="Regular messages"
          android:key="regular_messages">
      
          <CheckBoxPreference 
              android:key="enable_regular_messages"
              android:summary="Enable or disable regular messages"
              android:title="Send regular messages" 
              android:defaultValue="true"
          />
      
          <ListPreference 
              android:key="send_interval"
              android:title="Send interval"
              android:summary="Define how often you want to send messages"
              android:defaultValue="60000" 
              android:entries="@array/send_interval"
              android:entryValues="@array/send_interval_values"
              android:dependency="enable_regular_messages"
          />
      
       <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
           android:title="Messages type"
           android:key="messages_type"
           android:summary="Select the type of messages to be sent"
           android:dependency="enable_regular_messages">
          <CheckBoxPreference 
              android:key="enable_status_messages"
              android:summary="Enable or disable status messages"
              android:title="Send status messages" 
              android:defaultValue="true"
          />
      
          <CheckBoxPreference 
              android:key="enable_event_messages"
              android:summary="Enable or disable event messages"
              android:title="Send event messages" 
              android:defaultValue="true"
          />
      
          <CheckBoxPreference 
              android:key="enable_critical_messages"
              android:summary="Enable or  disable critical messages"
              android:title="Send critical messages" 
              android:defaultValue="true"
          />
      
          </PreferenceScreen>
      
      </PreferenceCategory>
      

      【讨论】:

        【解决方案5】:

        找到一个非常有用的链接: http://blog.350nice.com/wp/archives/240

        【讨论】: