ANDROID:Listview在删除数据库数据后不会更新

时间:2013-01-25 06:58:11

标签: android listview cursor adapter updates

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();

}

3 个答案:

答案 0 :(得分:1)

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

您的列表视图未更新的原因是您正在为其适配器填充值,但不会从中删除已删除的值。

例如你

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

但没有相应的

adapter.remove(name);

答案 1 :(得分:0)

试试这个

listView.inValidate():

答案 2 :(得分:0)

这种情况正在发生,因为您在清除adapter

之前将值添加到database

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

如果这有助于你,请告诉我