好吧,我想我已经明白了,但我只是想确定一下。我有一个包含List的ListViewAdapter。我想做的是搜索在数据库中思考并在ListView中显示。这段代码将一个项添加到我的listView。
list.addAll(sqh.DisplayRecords(sqdb));
listViewAdapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,list);
listview.setAdapter(listViewAdapter);
search.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
listViewAdapter.clear();
list.clear();
list.addAll(sqh.DisplayRecords(sqdb));
list.add("another one");
}
});
使用另一段代码,只清除listviewAdapter并将另一项添加到列表中,只添加最后一项,而不是列表中的所有项目,应该在那里。
list.addAll(sqh.DisplayRecords(sqdb));
listViewAdapter = new ArrayAdapter( this,android.R.layout.simple_list_item_1,list);
listview.setAdapter(listViewAdapter);
search.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
listViewAdapter.clear();
list.add("another one");
}
});
嗯,我想我在写这篇文章时理解它。第三个和第一个是完全相同的。
list.addAll(sqh.DisplayRecords(sqdb));
listViewAdapter = new ArrayAdapter( this,android.R.layout.simple_list_item_1,list);
listview.setAdapter(listViewAdapter);
search.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
listViewAdapter.clear();
list.addAll(sqh.DisplayRecords(sqdb));
list.add("another one");
}
});
listViewAdapter.clear();将清除适配器列表,对吧?为什么,当我执行list.clear()时,列表视图不会被清除?
答案 0 :(得分:0)
<强> listViewAdapter.clear() 强>
void clear()
从列表中删除所有元素。
list.clear();
/**
* Removes all of the elements from this list. The list will
* be empty after this call returns.
*/
public void clear() {
modCount++;
// clear to let GC do its work
for (int i = 0; i < size; i++)
elementData[i] = null;
size = 0;
}
如果您在此使用,则它是相同的。它曾用于Removes all of the elements from this list
。
答案 1 :(得分:0)
当您致电list.clear();
时,您将从列表中删除所有元素。此调用返回后,列表将为空。但您的适配器视图尚未更改。您需要调用adapter.notifyDataSetChanged()
来刷新适配器。
在另一种情况下,当您调用listViewAdapter.clear();
时,列表将先被清除,然后notifyDataSetChanged()
被调用。
您可以在ArrayAdapter.clear()
source code中找到详细信息:
/**
* Remove all elements from the list.
*/
public void clear() {
synchronized (mLock) {
if (mOriginalValues != null) {
mOriginalValues.clear();
} else {
mObjects.clear();
}
mObjectsFromResources = false;
}
if (mNotifyOnChange) notifyDataSetChanged();
}