В моем приложении 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);
Наконец я узнал, а не почему, но который, элемент уничтожает обновление счетчика.
Я использовал два разных URI одного ContentProvider для обновления всех элементов и отображения только активных элементов
Если я использую один и тот же 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);
)
вы можете вызвать метод notifyDataSetChanged
адаптера
Ты пробовал:
getLoaderManager().restartLoader(0, null, this);
в вашей деятельности, сразу после внесения изменений в базу данных.