У меня есть 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. Что мне нужно, чтобы отображаемая сводка всегда отображала текущее значение?