【问题标题】:Android ListAdapter is not updatingAndroid ListAdapter 未更新
【发布时间】:2011-04-06 06:17:42
【问题描述】:

我有一个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(),但它不起作用。问题的解决方法是什么?

【问题讨论】:

  • 您确定通过deleteRes(wordId);删除了基础数据吗?
  • 数据正在正确删除...如果我去另一个部分....然后回到那个部分...它给出了正确的列表。
  • 或许你可以多贴一些代码,比如适配器,看看有什么问题。

标签: android listview listactivity listadapter


【解决方案1】:

我用下面的代码,问题就解决了。

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

【讨论】:

【解决方案2】:

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

【讨论】:

  • 没有数组或列表。它是一个游标,使用“ListAdapter favAdapter = new SimpleCursorAdapter(this,android.R.layout.simple_list_item_1,favCursor,new String[] {WordDataHelper.ENGWORD},new int[ ] {android.R.id.text1});"
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    删除后使用getListView().invalidateViews。

    【讨论】:

      【解决方案5】:
      1. 使用查询从数据库中删除项目
      2. 要么获取新游标,要么重新查询旧游标adapter.getCursor().requery()
      3. 致电adapter.notifyDatasetChanged

      【讨论】:

      • 我认为 requery() 已被弃用。
      • 原来如此。反正从来没用过。
      【解决方案6】:

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

      adapter.notifyDataSetChanged();
      

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

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

      【讨论】:

        猜你喜欢
        • 2022-01-03
        • 2018-09-18
        • 2016-03-11
        • 1970-01-01
        • 1970-01-01
        • 2011-07-04
        • 1970-01-01
        • 1970-01-01
        • 2023-03-04
        相关资源
        最近更新 更多