Освежающий спиннер - PullRequest
       3

Освежающий спиннер

7 голосов
/ 04 июля 2010

У меня есть вид со счетчиком. Действие запускает еще одну акцию с всплывающего окна, в котором я добавляю или удаляю значения, которые родитель отображает в Spinner. Итак, в onActivityResult () я обновляю содержимое Spinner, чтобы оно отражало любые дополнительные или удаленные значения, вызывая мой метод fillSpinner (). Параметром этого метода является предварительно выбранное значение:

private void fillSpinner(String value){

    Cursor c =  mDbHelper.getAllCategories();
    startManagingCursor(c);
    c.moveToFirst();

    String[] from = new String[]{DBAdapter.KEY_CATEGORY};       
    SimpleCursorAdapter scCats = new SimpleCursorAdapter(
        this, android.R.layout.simple_spinner_item,c,from,
            new int[]{android.R.id.text1});
    scCats.setDropDownViewResource(
        android.R.layout.simple_spinner_dropdown_item);
    category.setAdapter(scCats);

    if (value != null && value != "") {
        category.setSelection((int)mDbHelper.categoryIndex(value));
    }
}

Когда я открываю Spinner, он содержит правильный список (то есть он был обновлен) и выбрано правильное значение. Однако сам элемент управления Spinner (в закрытом состоянии) показывает не выбранное значение, а первое в списке.

Когда я выполняю код в отладчике, значение Spinner является правильным до и после того, как я вызываю setSelection () (и всегда вызывается с одинаковым правильным идентификатором). Однако, поскольку я не могу выйти из события, когда я возобновляю выполнение через короткий промежуток времени, значение в Spinner изменяется.

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

Любые идеи приветствуются.

Ответы [ 2 ]

5 голосов
/ 20 марта 2012

Я нашел простое решение этой проблемы: используйте форму Spinner.setSelection (int position, Boolean NavigateTo), чтобы Spinner отображал правильный выбранный элемент.

Пример: Spin.setSelection (iPos, true);

Удачи.

1 голос
/ 04 июля 2010

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

Удерживая курсор после его первоначального создания, я смог просто вызвать требуемый () после изменения данных списка, в отличие от выполнения метода в моем вопросе.Теперь работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...