Android List Preference на шаг позади

У меня есть 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». Кажется, он возвращает выбор до нового выбора. Как мне получить текущий выбор, а не последний?


person AzHole    schedule 12.05.2011    source источник
comment
stackoverflow .com/questions/6148952/   -  person Jared Burrows    schedule 01.08.2012


Ответы (1)


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

person dmon    schedule 12.05.2011
comment
Отлично, это именно то, что я делал неправильно. Это имеет смысл теперь, когда я смотрю на это больше. Спасибо dmon, ценю это! - person AzHole; 12.05.2011