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();
}
答案 0 :(得分:1)
您的代码不是最佳的,因为每次调用delete方法都会创建一个新的适配器。您应该保持对适配器的活动范围引用(可能在“OnCreate”中)
您的列表视图未更新的原因是您正在为其适配器填充值,但不会从中删除已删除的值。
例如你
datasource.deleteName(adapter.getItem(position));
但没有相应的
adapter.remove(name);
答案 1 :(得分:0)
试试这个
listView.inValidate():
答案 2 :(得分:0)
这种情况正在发生,因为您在清除adapter
database
在清除/删除adapter
中的值后向database
添加值,然后调用adapter.notifyDataSetChanged();
如果这有助于你,请告诉我