Хотя это задокументировано, с помощью "%s"
я могу отобразить выбранное значение как итог, это не работает, как ожидалось.
http://developer.android.com/reference/android/preference/ListPreference.html#getSummary%28%29
У меня есть следующий preferences.xml
и вот мой arrays.xml
- Display value 0
- Display value 1
- 0
- 1
Чего я ожидаю, имея следующий код Java для создания полного предпочтения, с флажком и списком предпочтений, итоговый текст списка предпочтений может обновляться автоматически всякий раз, когда я выполняю выбор. Текст сводки будет переключаться между Отображаемое значение 0и Отображаемое значение 1.
public class Preferences extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
Однако я понимаю, что текст сводки для списка предпочтений не будет обновляться автоматически. Только когда я выполняю отметку/снимаю флажок, только вся активность будет недействительной, а итоговый текст для предпочтения списка будет ТОЛЬКО обновлен.
Следовательно, я должен пересмотреть свой код следующим образом, который выглядит более громоздким.
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);
}
}
}
}
Это правильный путь? Есть ли какой-либо упрощенный способ обеспечить автоматическое обновление сводного текста ListPreference при каждом изменении выбора.