Der Zusammenfassungstext von ListPreference wird nicht automatisch aktualisiert, wenn sich die Auswahl ändert

Obwohl es dokumentiert wird, mit"%s"Ich kann den ausgewählten Wert als Zusammenfassung anzeigen, er funktioniert nicht wie erwartet.

http://developer.android.com/reference/android/preference/ListPreference.html#getSummary%28%29

Ich habe folgendespreferences.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>

und hier ist meinearrays.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>

Was ich von dem folgenden Java-Code erwarte, um eine vollständige Präferenzaktivität mit einem Kontrollkästchen und einer Listenpräferenz zu erstellen, kann der Zusammenfassungstext der Listenpräferenz bei jeder Auswahl automatisch aktualisiert werden. Der zusammenfassende Text wechselt zwischenAnzeigewert 0 undAnzeigewert 1.

<code>public class Preferences extends PreferenceActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
    }
}
</code>

Mir ist jedoch klar, dass der Zusammenfassungstext für die Listeneinstellung nicht automatisch aktualisiert wird. Nur wenn ich das Kontrollkästchen aktiviere / deaktiviere, wird nur die gesamte Aktivität ungültig und der Zusammenfassungstext für die Listenpräferenz wird NUR aktualisiert.

Daher muss ich meinen Code wie folgt überarbeiten, was mehr aussiehtschwerfällig.

<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>

Ist das ein richtiger Weg? Gibt es eine vereinfachte Möglichkeit, um sicherzustellen, dass der Übersichtstext von ListPreference immer automatisch aktualisiert wird, wenn sich die Auswahl ändert.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage