Текст сводки ListPreference не обновляется автоматически при изменении выбора.

Хотя это задокументировано, с помощью "%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 при каждом изменении выбора.

15
задан Cheok Yan Cheng 12 April 2012 в 08:15
поделиться