我有一个显示星期列表的MultiSelectListPreference,当用户关闭多选对话框时,我想使用%s
显示所选值的摘要,但它只适用于ListPreference。对此有什么解决方案吗?
<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" />
发布于 2018-11-22 10:01:19
首先,向MultiSelectListPreference
添加一个扩展方法,该方法根据所选值设置摘要:
fun MultiSelectListPreference.setSummaryFromValues(values: Set<String>) {
summary = values.map {entries[findIndexOfValue(it)]}.joinToString(", ")
}
然后在例如。PreferenceFragmentCompat
的onCreateView
val columnSelect = findPreference("EXPORT_COLUMNS") as MultiSelectListPreference
columnSelect.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { preference, newValue ->
columnSelect.setSummaryFromValues(newValue as Set<String>)
true
}
columnSelect.setSummaryFromValues(columnSelect.values)
发布于 2017-10-17 10:53:24
您需要创建自定义版本的MultiSelectListPreference和ovveride getSummary
方法,如下所示:
@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;
}
发布于 2018-10-19 13:06:03
至少在Kotlin中,您可以向MultiSelectListPreference类添加一个函数,如下所示:
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
}
使用方法如下:
prefSelectWeek.useSelectionAsSummary()
https://stackoverflow.com/questions/41775332
复制