Я использую базу данных, и есть фрагмент списка, который использует адаптер курсора, который я получаю, запрашивая базу данных в загрузчике.
Когда пользователь нажимает на элемент просмотра списка длительным нажатием, он видит контекстное меню и возможность удалить эту запись.
Когда он нажимает «Удалить», я запускаю поток, который удаляет эту запись, а затем снова запускаю загрузчик, чтобы получить новый курсор (потому что «Requery ()» не рекомендуется).
Когда загрузчик заканчивает загрузку нового курсора, я пытаюсь использовать метод changeCursor
, который предполагает обновить представление списка, но не делает этого, поэтому я попытался использовать notifyDataSetChanged
, но он тоже не работает.
Я проверил, и курсор возвращается из загрузчика, и он меняет курсор, но представление списка не обновляется.
Что мне делать? Перезапустить фрагмент?
Вот код:
case MENU_REMOVE:
final AdapterContextMenuInfo info = (AdapterContextMenuInfo)item.getMenuInfo();
mProgress = ProgressDialog.show(getActivity(), getString(R.string.list_remove_progress_title_text),
getString(R.string.progress_dialog_description));
new Thread(new Runnable() {
@Override
public void run() {
PlacesHandler wph = new PlacesHandler(getActivity());
wph.DeleteEntry(mPlaceName, info.id);
getLoaderManager().initLoader(0, null, ListFragment.this);
}
}).start();
return(true);
По окончании загрузки:
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
if(mProgress == null || !mProgress.isShowing()){
...
}
else{
mProgress.dismiss();
mAdapter.changeCursor(data);
mAdapter.notifyDataSetChanged();
}
}
Спасибо!