Android ListAdapter未更新

时间:2011-04-06 06:17:43

标签: android listview listactivity listadapter

我有ListAdapter,用于显示Listview中的列表。现在我添加了一个longpress菜单操作来删除任何选定的项目。

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 个答案:

答案 0 :(得分:1)

我使用了以下代码,问题解决了。

favCursor  = wordDataHelper.getCursorFav();
((SimpleCursorAdapter) favAdapter).changeCursor(favCursor);

答案 1 :(得分:0)

从数组/列表中删除项目,之后将数组/列表分配给适配器,然后写入notifyDataSetChanged()。

答案 2 :(得分:0)

从列表中删除项目后,您必须通过对数据库执行新查询来获取新的Cursor。然后,您可以通过使用新光标作为参数调用CursorAdapter来更改SimpleCursorAdapter(changeCursor())的光标。

答案 3 :(得分:0)

删除后使用getListView()。invalidateViews。

答案 4 :(得分:0)

  1. 使用查询从数据库中删除项目
  2. 获取新光标,或重新查询旧光标adapter.getCursor().requery()
  3. 致电adapter.notifyDatasetChanged

答案 5 :(得分:0)

尝试使用notifyDataSetChanged方法,它应该可以工作。

adapter.notifyDataSetChanged();

但是,有时会失败。如果它失败了,那么使用新的列表元素重新初始化adepter。它对我有用。

adapter = new ArrayAdapter<Item>(getApplicationContext(),android.R.layout.simple_list_item_1, itemList);
setListAdapter(adapter);