首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >显示多选列表首选项中的选定值

显示多选列表首选项中的选定值
EN

Stack Overflow用户
提问于 2017-01-21 11:06:29
回答 3查看 1.1K关注 0票数 3

我有一个显示星期列表的MultiSelectListPreference,当用户关闭多选对话框时,我想使用%s显示所选值的摘要,但它只适用于ListPreference。对此有什么解决方案吗?

代码语言:javascript
运行
复制
<MultiSelectListPreference
        android:id="@+id/pref_select_week"
        android:defaultValue="@array/week_array_values"
        android:entries="@array/week_array"
        android:entryValues="@array/week_array_values"
        android:icon="@drawable/ic_pref_time"
        android:key="keyZodiacSign"
        android:summary="%s"
        android:title="Select Days" />
EN

回答 3

Stack Overflow用户

发布于 2018-11-22 18:01:19

首先,向MultiSelectListPreference添加一个扩展方法,该方法根据所选值设置摘要:

代码语言:javascript
运行
复制
fun MultiSelectListPreference.setSummaryFromValues(values: Set<String>) {
    summary = values.map {entries[findIndexOfValue(it)]}.joinToString(", ")
}

然后在例如。PreferenceFragmentCompatonCreateView

代码语言:javascript
运行
复制
val columnSelect = findPreference("EXPORT_COLUMNS") as MultiSelectListPreference
columnSelect.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { preference, newValue ->
    columnSelect.setSummaryFromValues(newValue as Set<String>)
    true
}
columnSelect.setSummaryFromValues(columnSelect.values)
票数 3
EN

Stack Overflow用户

发布于 2017-10-17 18:53:24

您需要创建自定义版本的MultiSelectListPreference和ovveride getSummary方法,如下所示:

代码语言:javascript
运行
复制
@Override
public CharSequence getSummary() {
    CharSequence cs = super.getSummary();
    String summary = cs.toString();

    if (summary.contains("%s")) {
        String text = "";
        StringBuilder builder = new StringBuilder();
        CharSequence[] entries = getEntries();
        if(entries.length > 0) {
            CharSequence[] entryValues = getEntryValues();
            Set<String> values = getValues();
            int pos = 0;

            for (String value : values) {
                pos++;
                int index = -1;
                for (int i = 0; i < entryValues.length; i++) {
                    if (entryValues[i].equals(value)) {
                        index = i;
                        break;
                    }
                }
                builder.append(entries[index]);
                if (pos < values.size())
                    builder.append(", ");
            }
            text = builder.toString();
        }
        summary = String.format(summary, text);
    }

    return summary;
}
票数 2
EN

Stack Overflow用户

发布于 2018-10-19 21:06:03

至少在Kotlin中,您可以向MultiSelectListPreference类添加一个函数,如下所示:

代码语言:javascript
运行
复制
import android.support.v14.preference.MultiSelectListPreference

fun MultiSelectListPreference.useSelectionAsSummary() {
    var summary = ""
    for (value in this.values) {
        if (summary.isNotEmpty()) {
            summary += ", "
        }
        val i = this.findIndexOfValue(value.toString())
        summary += this.entries[i]
    }
    this.summary = summary
}

使用方法如下:

代码语言:javascript
运行
复制
prefSelectWeek.useSelectionAsSummary()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41775332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档