【问题标题】:ANDROID: Listview wont update after deleting database dataANDROID:删除数据库数据后列表视图不会更新
【发布时间】:2013-01-25 06:58:11
【问题描述】:

Android 新手,我在从数据库中删除条目后更新我的 ListView 时遇到问题。

在我的活动中,我有一个ListView,每行都有多个选择checkboxes。用户按下删除按钮后,deleteName() 被调用。然后deleteName() 将删除在ListView 中检查的所有名称。名称从数据库中删除,但 ListView 永远不会更新。

我尝试使用adapter.notifyDataSetChanged(),但没有任何反应。为什么我的ListView 不更新?

public void deleteName() {

    NamesDataSource datasource = new NamesDataSource(this);
    datasource.open();

    ListView listView = (ListView) findViewById(android.R.id.namelist);
    SparseBooleanArray checked = listView.getCheckedItemPositions();

    List<Name> values = datasource.getAllNames();
    ArrayAdapter<Name> adapter = new ArrayAdapter<Name>(this, android.R.layout.simple_list_item_multiple_choice, values);

    for (int i = 0; i < checked.size(); i++) {
        int position = checked.keyAt(i);
        if (checked.valueAt(i))
            datasource.deleteName(adapter.getItem(position));
    }

    adapter.notifyDataSetChanged();
    setListAdapter(adapter);
    datasource.close();

}

【问题讨论】:

  • 不好的做法:1)每次删除数据时查找视图2)如果您使用notifyDataSetChanged(),则无需再次将适配器设置为ListView
  • 尝试使用 values.remove(location here) 从值列表中删除数据

标签: android listview cursor adapter updates


【解决方案1】:

您的代码不是最优的,因为您在每次调用 delete 方法时都创建了一个新适配器。您应该维护对适配器的活动范围引用(可能在您的“OnCreate”中)

您的列表视图没有更新的原因是因为您正在用值填充它的适配器,但没有从中删除已删除的值。

比如你是

datasource.deleteName(adapter.getItem(position));

但是没有对应的

adapter.remove(name);

【讨论】:

  • 是的,我知道代码不是最优的。我把那些留在那里以供参考。谢谢 .remove 工作!
【解决方案2】:

试试这个

listView.inValidate():

【讨论】:

    【解决方案3】:

    这是因为您在清除 database 之前向 adapter 添加值

    在清除/删除database中的值后将值添加到adapter,然后调用adapter.notifyDataSetChanged();

    如果这对你有帮助,请告诉我

    【讨论】:

    • 您好,谢谢您的解释。所以你是说做这样的事情吗?适配器.add(值);适配器.notifyDataSetChanged();? .add 给我错误...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多