Obwohl es dokumentiert wird, indem ich "%s"
verwende, kann ich ausgewählten Wert als Zusammenfassung anzeigen, es funktioniert nicht wie erwartet.ListPreference Zusammenfassungstext wird nicht automatisch aktualisiert, wenn es eine Änderung in Auswahl gibt
http://developer.android.com/reference/android/preference/ListPreference.html#getSummary%28%29
ich folgende preferences.xml
<?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>
habe und hier ist mein arrays.xml
<?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>
Was den folgenden Java-Code, indem ich erwarte eine vollständige Präferenz Aktivität zu bauen, Mit einem Kontrollkästchen und einer Listenpräferenz kann der Übersichtstext der Listenpräferenz automatisch aktualisiert werden, wenn Ich führe immer eine Auswahl durch. Der zusammenfassende Text schaltet zwischen um. Anzeigewert 0 und Anzeigewert 1.
Allerdings merke ich die Zusammenfassung Text für Listenpräferenz wird nicht automatisch aktualisiert. Nur wenn ich das Kontrollkästchen aktiviere/deaktiviere, wird nur die gesamte Aktivität ungültig und der Übersichtstext für die Listenpräferenz wird NUR aktualisiert.
Daher muss ich meinen Code wie folgt überarbeiten, die mehr umständlich aussieht.
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);
}
}
}
}
Ist das ein richtiger Weg? Gibt es einen vereinfachten Weg, um sicherzustellen, dass der Übersichtstext von ListPreference immer automatisch aktualisiert wird, wenn die Auswahl geändert wird.
Danke, es hätte lange gedauert, das herauszufinden. – Gerhard
mögliches Duplikat von [Ändern Sie die Zusammenfassung einer ListPreference mit dem neuen Wert (Android)] (http://stackoverflow.com/questions/7017082/change-the-summary-of-a-listpreference-with-the-new- Wert-android) – CAMOBAP