У меня есть ListAdapter
, который используется для отображения списка в Listview
. Теперь я добавил действие меню "Длинное нажатие" для удаления любого выбранного элемента.
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item
.getMenuInfo();
final Long wordId = menuInfo.id;
// selected_row = menuInfo.position;
// To get the id of the clicked item in the list use menuInfo.id
switch (item.getItemId()) {
case CONTEXT_DELETE:
deleteRes(wordId); // delete function for the item
break;
default:
return super.onContextItemSelected(item);
}
//((BaseAdapter) favAdapter).notifyDataSetChanged();
return true;
}
Но после удаления список обновляется и показывает старый список с удаленным элементом. Я пробовал использовать notifyDataSetChanged()
, но он не работает. Каково решение проблемы?
Я использовал следующий код, и проблема решена.
favCursor = wordDataHelper.getCursorFav();
((SimpleCursorAdapter) favAdapter).changeCursor(favCursor);
Попробуйте использовать метод notifyDataSetChanged, он должен работать.
adapter.notifyDataSetChanged();
Но иногда это терпит неудачу. Если вам это не удается, повторите инициализацию adepter с новыми элементами списка. Это работает для меня.
adapter = new ArrayAdapter<Item>(getApplicationContext(),android.R.layout.simple_list_item_1, itemList);
setListAdapter(adapter);
adapter.getCursor().requery()
adapter.notifyDatasetChanged
После удаления элемента из списка вы должны получить новый курсор, выполнив новый запрос в базе данных. Затем вы можете изменить курсор вашего SimpleCursorAdapter (CursorAdapter), вызывая changeCursor() с новым курсором в качестве параметра.
использовать getListView(). invalidateViews после удаления.
удалите элемент из массива/списка, после этого назначьте массив/список адаптеру и после этого напишите notifyDataSetChanged().
deleteRes(wordId);
?