Настройки списка Android на шаг позади - PullRequest
3 голосов
/ 12 мая 2011

У меня есть ListPreference в системе настроек для моего приложения для Android, чтобы пользователь мог выбирать из одного из 5 различных учетных записей данных. В настройках они должны иметь возможность переключаться между учетными записями, которые они хотят использовать в настоящее время. Проблема, однако, в том, что когда я нажимаю на один из вариантов, я получаю выбор от до , когда список был открыт. Код следующий:

    // Get the Account Preferences pointer
    final ListPreference accountPref = (ListPreference) findPreference("accountPref");
    CharSequence[] entries = { "Account 1", "Account 2", "Account 3", "Account 4", "Account 5" };
    CharSequence[] entryValues = { "1", "2", "3", "4", "5" };
    accountPref.setEntries(entries);
    accountPref.setEntryValues(entryValues);
    accountPref.setDefaultValue("1");

    accountPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
        public boolean onPreferenceChange(Preference preference, Object newValue) {
            Log.i("theApp", "Selected = " + accountPref.getValue());
            return true;
        }

    });        

Поэтому, если я выберу третью запись в диалоговом окне, журнал вернет «1». Если я выберу 5-й, он вернет «3». Кажется, он возвращает выбор до нового выбора. Как мне получить текущий выбор, а не последний?

1 Ответ

2 голосов
/ 12 мая 2011

Если так, то это потому, что вы читаете accountPref.getValue().Значение еще не зафиксировано, оно фиксируется только один раз, когда onPreferenceChange() возвращает true.Вместо этого используйте параметр newValue, чтобы прочитать то, что пользователь просто выбрал.

...