我有一个 ListPreference,我想在摘要中显示当前条目。根据ListPreference.getSummary()的文档,我应该能够通过包含%s
在摘要字符串中来做到这一点。不幸的是,活动只显示%s
在摘要中。
XML 非常标准:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<ListPreference
android:key="displayMode"
android:summary="@string/display_mode_summary"
android:title="@string/display_mode"
android:defaultValue="BOTH"
android:entries="@array/displayModes"
android:entryValues="@array/displayModeValues"
/>
</PreferenceScreen>
字符串的值display_mode_summary
只是%s
. (该值"BOTH"
存在于displayModeValues
数组中。)如果我像这样子类 ListPreference:
public final class DisplayModePreference extends ListPreference {
// ...
@Override
public CharSequence getSummary() {
return String.format(super.getSummary().toString(), getEntry());
}
}
然后当偏好活动开始时,当前值被正确地插入到摘要中。但是,当我单击首选项并从对话框中选择不同的值时,当对话框关闭时,摘要仍然显示现在的旧值。我需要关闭首选项活动并重新启动它以查看更改。
我已经在不同 API 级别的几个模拟器中尝试过这个。我需要做什么才能使显示的摘要始终反映当前值?