Android ListAdapter не обновляется - PullRequest
1 голос
/ 06 апреля 2011

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

Ответы [ 6 ]

1 голос
/ 08 апреля 2011

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

favCursor  = wordDataHelper.getCursorFav();
((SimpleCursorAdapter) favAdapter).changeCursor(favCursor);
0 голосов
/ 07 июня 2012

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

adapter.notifyDataSetChanged();

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

adapter = new ArrayAdapter<Item>(getApplicationContext(),android.R.layout.simple_list_item_1, itemList);
setListAdapter(adapter);
0 голосов
/ 06 апреля 2011
  1. Удалить элемент из вашей базы данных с запросом
  2. Либо получить новый курсор, либо запросить старый adapter.getCursor().requery()
  3. Звоните adapter.notifyDatasetChanged
0 голосов
/ 06 апреля 2011

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

0 голосов
/ 06 апреля 2011

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

0 голосов
/ 06 апреля 2011

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

...