0

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

在我的活动中,我在每一行都有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();

}
4

3 回答 3

1

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

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

例如你是

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

但是没有对应的

adapter.remove(name);
于 2013-01-25T07:20:39.333 回答
0

试试这个

listView.inValidate():
于 2013-01-25T07:02:30.037 回答
0

发生这种情况是因为您adapter在清除之前添加了值database

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

让我知道这是否对您有帮助

于 2013-01-25T07:02:55.227 回答