0

我正在尝试从CustomListView实现Filterable中搜索BaseAdapter,但它提供了重复的搜索数据..

            @Override
    public Filter getFilter() {
        // TODO Auto-generated method stub
         // Here myList contains Original data
        return new MyFilter(myList);
    }

private class MyFilter extends Filter {

    List<ListModel> myValues;

    public MyFilter(List<ListModel> list) {
        // TODO Auto-generated constructor stub
        myValues = new ArrayList<ListModel>(list);
    }

    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        // TODO Auto-generated method stub

        FilterResults results = new FilterResults();

        List<ListModel> temp = new ArrayList<ListModel>();

        if (TextUtils.isEmpty(constraint)) {

            if (temp.size() > 0)
                temp.clear();
            temp.addAll(myValues);
        }

        else {
            for (ListModel model : myValues) {

                if (model.getNames().toLowerCase.contains(constraint.toString().toLowerCase()))
                    temp.add(model);
            }

        }
        results.values = temp;
        results.count = temp.size();

        return results;
    }

      @SuppressWarnings("unchecked")
      @Override
    protected void publishResults(CharSequence constraint,
            FilterResults results) {
        // TODO Auto-generated method stub

        if (results != null && results.count > 0) {

            myList.clear();
            myList.addAll((List<ListModel>) results.values);

        } else
            myList.addAll(myValues);

        mAdapter.notifyDataSetChanged();

    }
}

我没有找到我犯错的地方,搜索工作完美,但它向我的自定义列表视图添加了更多数据..

例子

假设我搜索“印度”,然后它将整个列表视图数据添加为“印度”。如果我的列表视图包含 10 行的大小,则它与“印度”组成 20 行

任何帮助,将不胜感激。

4

1 回答 1

1

最后我能够解决我自己的问题..

这里有几件事解决了我的问题..

    @Override
    public Filter getFilter() {
        // TODO Auto-generated method stub

        return new MyFilter();
    }

    private class MyFilter extends Filter {

    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        // TODO Auto-generated method stub

        FilterResults results = new FilterResults();

        List<ListModel> temp = new ArrayList<ListModel>();

        if (TextUtils.isEmpty(constraint)) {

            if (temp.size() > 0)
                temp.clear();
            // I have created new List from old myList before search begins
            temp.addAll(newList);
        }
        else
        {
            // newList 
            for (ListModel model : newList)
            {
                if(model.getNames().toLowerCase.contains(constraint.toString().toLowerCase()))
                    temp.add(model);
            }

        }
        results.values = temp;
        results.count = temp.size();

        return results;
    }

    @SuppressWarnings("unchecked")
    @Override
    protected void publishResults(CharSequence constraint,
            FilterResults results) {
        // TODO Auto-generated method stub

              myList.clear();

        if (results != null && results.count > 0)         
            myList.addAll((List<ListModel>) results.values);
        else
            myList.addAll(myList);

        mAdapter.notifyDataSetChanged();

    }
} //updated code
于 2013-01-10T14:32:36.147 回答