Android ListAdapter не обновляется

1

У меня есть 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(), но он не работает. Каково решение проблемы?

  • 0
    Вы уверены, что базовые данные удалены через deleteRes(wordId); ?
  • 0
    данные удаляются должным образом ... если я иду в другой раздел .... и возвращаюсь в этот раздел ... он дает правильный список.
Показать ещё 1 комментарий
Теги:
listview
listadapter
listactivity

6 ответов

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

Я использовал следующий код, и проблема решена.

favCursor  = wordDataHelper.getCursorFav();
((SimpleCursorAdapter) favAdapter).changeCursor(favCursor);
  • 0
    Пожалуйста, опишите, как вы решили это? У меня та же проблема. Я разместил свой код на stackoverflow.com/questions/23512776/… . Благодарю.
0

Попробуйте использовать метод notifyDataSetChanged, он должен работать.

adapter.notifyDataSetChanged();

Но иногда это терпит неудачу. Если вам это не удается, повторите инициализацию adepter с новыми элементами списка. Это работает для меня.

adapter = new ArrayAdapter<Item>(getApplicationContext(),android.R.layout.simple_list_item_1, itemList);
setListAdapter(adapter);
0
  • Удалить элемент из базы данных с помощью запроса
  • Либо получить новый курсор, либо запросить старый adapter.getCursor().requery()
  • Вызов adapter.notifyDatasetChanged
  • 0
    Я думаю, что Requery () устарела.
  • 0
    Так что, это. Никогда не использовал это так или иначе.
0

После удаления элемента из списка вы должны получить новый курсор, выполнив новый запрос в базе данных. Затем вы можете изменить курсор вашего SimpleCursorAdapter (CursorAdapter), вызывая changeCursor() с новым курсором в качестве параметра.

0

использовать getListView(). invalidateViews после удаления.

0

удалите элемент из массива/списка, после этого назначьте массив/список адаптеру и после этого напишите notifyDataSetChanged().

  • 0
    Там нет массива или списка. Это курсор, который передается в favAdapter (который является ListAdapter) с использованием «ListAdapter favAdapter = new SimpleCursorAdapter (this, android.R.layout.simple_list_item_1, favCursor, new String [] {WordDataHelper.ENGWORD}, new int [ ] {android.R.id.text1}); "

Ещё вопросы

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