Сводный текст ListPreference не обновляется автоматически при изменении выбора
Хотя это документируется, используя"%s"
Я могу отобразить выбранное значение в виде сводки, оно не работает должным образом.
http://developer.android.com/reference/android/preference/ListPreference.html#getSummary%28%29
У меня следующееpreferences.xml
<code><?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="@string/preference_xxx_category"> <CheckBoxPreference android:title="@string/preference_xxx_mode_title" android:defaultValue="false" android:summary="@string/preference_xxx_mode_summary" android:key="xxxModePreference" /> </PreferenceCategory> <PreferenceCategory android:title="@string/preference_yyy_category"> <ListPreference android:title="@string/preference_yyy_mode_title" android:defaultValue="0" android:entries="@array/yyy" android:entryValues="@array/yyy_values" android:summary="%s" android:key="yyyModePreference" /> </PreferenceCategory> </PreferenceScreen> </code>
а вот мойarrays.xml
<code><?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="yyy"> <item>Display value 0</item> <item>Display value 1</item> </string-array> <string-array name="yyy_values"> <item>0</item> <item>1</item> </string-array> </resources> </code>
То, что я ожидал, имея следующий Java-код для построения полного действия предпочтения, с флажком и предпочтением списка, сводный текст предпочтения списка может обновляться автоматически всякий раз, когда я выполняю выбор. Текст резюме будет переключаться междуDisplay value 0 а такжеDisplay value 1.
<code>public class Preferences extends PreferenceActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); } } </code>
Однако я понимаю, что сводный текст для списка предпочтений не будет обновляться автоматически. Только когда я выполняю отметку / снятие отметки с флажка, только все действие будет недействительным, и сводный текст для предпочтения списка будет обновляться ТОЛЬКО.
Следовательно, я должен пересмотреть свой код следующим образом, который выглядит болееcumbersome.
<code>public class Preferences extends PreferenceActivity implements OnSharedPreferenceChangeListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this); } @Override public void onResume() { super.onResume(); // Cumbersome way to make sure list preference's summary text is being updated. final String key = "yyyModePreference"; ListPreference listPreference = (ListPreference)findPreference(key); final String value = PreferenceManager.getDefaultSharedPreferences(this).getString(key, key); final int index = listPreference.findIndexOfValue(value); if (index >= 0) { final String summary = (String)listPreference.getEntries()[index]; listPreference.setSummary(summary); } } @Override public void onSharedPreferenceChanged(SharedPreferences options, String key) { // Cumbersome way to make sure list preference's summary text is being updated. if (key.equals("yyyModePreference")) { ListPreference listPreference = (ListPreference)findPreference(key); final String value = options.getString(key, key); final int index = listPreference.findIndexOfValue(value); if (index >= 0) { final String summary = (String)listPreference.getEntries()[index]; listPreference.setSummary(summary); } } } } </code>
Это правильный путь? Существует ли какой-либо упрощенный способ обеспечения того, чтобы сводный текст ListPreference всегда обновлялся автоматически всякий раз, когда происходит изменение в выборе.