0

这是代码:

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 中,然后插入适配器中。

但是每次点击我都无法删除以前的结果。对此的正确实施是什么?

4

2 回答 2

1

当您使用适配器并且信息发生变化时,请确保您正在调用adapter.notifyDataSetChanged();

于 2013-09-20T20:31:43.460 回答
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);

只需更新适配器的数据集(此处为“列表”)。

于 2013-09-20T20:53:29.823 回答