Mimo że dokumentacja jest udokumentowana, przy użyciu "%s"
mogę wyświetlić wybraną wartość jako podsumowanie, ale nie działa zgodnie z oczekiwaniami.Tekst podsumowania listyPreferencji nie jest automatycznie aktualizowany, gdy nastąpi zmiana w wyborze
http://developer.android.com/reference/android/preference/ListPreference.html#getSummary%28%29
Mam następujący 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>
i tu jest moje 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>
Czego spodziewa się poprzez następujący kod Java do tworzenia kompletnej aktywności preferencji, z polem wyboru i preferencją listy, tekst podsumowania preferencji listy może być aktualizowany automatycznie, kiedy kiedykolwiek dokonuję selekcji. Tekst podsumowania będzie przełączał się pomiędzy Wartość wyświetlana 0 i Wartość wyświetlana 1.
public class Preferences extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
Jednak zdaję sobie sprawę, że tekst podsumowania preferencji listy nie zaktualizuje się automatycznie. Tylko wtedy, gdy zaznaczę pole wyboru "zaznacz/odznacz", tylko cała aktywność zostanie unieważniona, a tekst podsumowania preferencji listy będzie TYLKO aktualizowany.
W związku z tym muszę poprawić mój kod w następujący sposób, który wygląda bardziej niewygodne.
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);
}
}
}
}
Czy to jest poprawny sposób? Czy istnieje jakiś uproszczony sposób, aby zapewnić, że tekst podsumowania ListPreference będzie zawsze aktualizowany automatycznie, gdy nastąpi zmiana w wyborze.
Dziękuję, zajęłoby mi to dużo czasu, aby to zrozumieć. – Gerhard
możliwy duplikat [Zmień podsumowanie ListPreference z nową wartością (Android)] (http://stackoverflow.com/questions/7017082/change-the-summary-of-a-listpreference-with-the-new- value-android) – CAMOBAP