Android: Spinner не обновляется после изменения набора данных

1

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

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

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

В 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);
Теги:
spinner
adapter
android-contentprovider
loader

3 ответа

0
Лучший ответ

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

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

  1. CONTENT_URI_ITEMS
  2. CONTENT_URI_ACTIVE_ITEMS

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

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

Хранить данные:

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);)

3

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

  • 0
    ... не может, но должен;)
  • 0
    хорошо я отвечал "что я могу сделать" :-)
Показать ещё 1 комментарий
0

Ты пробовал:

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню