以下是代码:
ibtSearchStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
try{
searchQuery = etSearchThis.getText().toString();
searchQuery = searchQuery.toUpperCase();
cursor = searchActivity.getData(product, "product", tableColumns);
//Clean ArrayList
resultRow.clear();
resultTable.clear();
//Get Search Result
resultTable = searchActivity.searchByProductName(cursor, searchQuery);
//Display Search Result
for(int ctr = 0; ctr < resultTable.size(); ctr++){
HashMap<String, String> map = new HashMap<String, String>();
resultRow = resultTable.get(ctr);
String result = resultRow.get(2);
map.put("ProductName",result);
list.add(map);
}
Log.e("resultProduct", "" + list);
adapter = new SimpleAdapter(
SearchMain.this,
list,
R.layout.search_result,
new String[]{"ProductName"},
new int[]{R.id.tvProductName}
);
lvSearchResult.setAdapter(adapter);
}
finally{
product.close();
}
}
});
这个功能是它会在数据库中搜索匹配,然后它会在HashMap中插入搜索结果,然后在适配器上插入。
但是每次点击我都无法删除之前的结果。 对此有什么适当的实施?
答案 0 :(得分:1)
使用适配器并更改信息时,请确保拨打adapter.notifyDataSetChanged();
答案 1 :(得分:0)
每次触发OnClick事件时都会设置一个新适配器。正如Jay Snayder所写,你应该使用adapter.notifyDataSetChanged();
代替。但是一定要只设置适配器一次并移动代码的以下部分(例如,移动到活动的onCreate()方法):
adapter = new SimpleAdapter(
SearchMain.this,
list,
R.layout.search_result,
new String[]{"ProductName"},
new int[]{R.id.tvProductName}
);
lvSearchResult.setAdapter(adapter);
只需更新适配器的DataSet(此处:'list')。