Android: Spinner не обновляется после изменения набора данных - PullRequest
1 голос
/ 15 марта 2012

В моем приложении spinne показывает активные элементы (я загружаю их из библиотеки поддержки Loader). Инициирование прядильщика работает нормально и показывает только активные элементы.

Но у меня возникла следующая проблема: Когда я редактирую элементы в другом упражнении и сохраняю их (активирую и деактивирую некоторые из них) и возвращаюсь (кнопка «Назад»), тогда я вижу «старый» список элементов в счетчике. Адаптер получает новый курсор с правильными данными, но счетчик не обновляет его список.

Что я могу сделать, чтобы обновить список счетчиков?

В onCreate() Я инициализирую Spinner

_ItemSpinner = (Spinner) getView().findViewById(R.id.spn_itemss);
_ItemAdapter = new AdvancedCursorAdapter(
    getActivity(),
    R.layout.spinner_2line_item,
    null, _ColumnList, _ColumnViews, 0);
_ItemSpinner.setAdapter(_ItemAdapter);

В onResume() Запускаю инициализацию загрузчика

@Override
public void onResume() {
    getLoaderManager().initLoader(1, null, this);
    super.onStart();
}

В onLoadFinished(Loader<Cursor> loader, Cursor data) Поменяю местами курсор для адаптера

_ItemAdapter.swapCursor(data);

Ответы [ 3 ]

3 голосов
/ 15 марта 2012

Вы можете вызвать метод notifyDataSetChanged адаптера

0 голосов
/ 19 июля 2012

Вы пробовали:

getLoaderManager().restartLoader(0, null, this);

в вашей деятельности, сразу после внесения изменений в базу данных.

0 голосов
/ 16 марта 2012

Наконец я выяснил, не почему, а какой элемент уничтожает обновление счетчика.

Я использовал два разных URI одного и того же ContentProvider для обновления всех элементов и показа только активных элементов

  1. CONTENT_URI_ITEMS
  2. CONTENT_URI_ACTIVE_ITEMS

Если я использую один и тот же URI для обновления и отображения (с необходимым активным фильтром), список счетчиков будет обновлен. Если я использую разные URI, то счетчик показывает old data.

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

Данные магазина:

getActivity().getContentResolver().update(
    RecordsContentProvider.CONTENT_URI_ITEMS,
    _Changes,
    COLUMN_ID + " =?",
    new String[] { String.valueOf(_ID) });

До (получить данные) - не работает :

CursorLoader curLoader = new CursorLoader(this.getActivity(),
    RecordsContentProvider.CONTENT_URI_ACTIVE_ITEMS,
    _ITEMS_PROJECTION,
    null, null, null);

После (получить данные) - работа :

CursorLoader curLoader = new CursorLoader(this.getActivity(),
    RecordsContentProvider.CONTENT_URI_ITEMS,
    _ITEMS_PROJECTION,
    COLUMN_IS_ACTIVE + " =1", null, null);

notifyDataSetChanged не требуется, если базовый ContentProvider делает это для вас так: (getContext().getContentResolver().notifyChange(uri, null);)

...