Как правильно обновить Spinner? - PullRequest
4 голосов
/ 25 февраля 2012

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

// 5th item selected
int pos = spinner.getSelectedItemPosition();
spinner.setAdapter(newAdapter);
// 0th item selected
spinner.setSelectedItem(pos);
// 5th item is selected

Но графический интерфейс все еще показывает первый элемент?Это правильный способ добиться того, чего я хочу?Я действительно не мог найти никакой информации об этом поведении.

Ответы [ 3 ]

2 голосов
/ 03 марта 2012

Решено: Думаю, главной проблемой был нестандартный адаптер спиннера.Теперь это прекрасно работает

if (spinner.getCount() > 0) {
    pos = spinner.getSelectedItemPosition();
}
MySpinnerAdapter adapter = new MySpinnerAdapter(context, myNewObjects);
spinner.setAdapter(adapter);
spinner.setSelection(pos); // needed
adapter.notifyDataSetChanged();
1 голос
/ 25 февраля 2012
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {

            spinner.setSelectedItem(5);
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub

        }
    });
0 голосов
/ 25 февраля 2012

Вы пробовали notifydatasetChanged() или notifydatasetInvalidate() метод адаптера.

newAdapter.notifydatasetChanged()
...