Сводный текст 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 всегда обновлялся автоматически всякий раз, когда происходит изменение в выборе.

Ответы на вопрос(3)

Ваш ответ на вопрос