android filter listview仅适用于第一次搜索

时间:2016-04-13 13:37:08

标签: android listview filter adapter searchview

我一直在试图找出似乎是什么问题,但是我可以解决它,基本上我正在过滤我的listview,它使用具有图像和文本的自定义适配器。它的作品第一次,例如当活动第一次运行时它拥有所有数据,当我在搜索框中输入内容时,它会对其进行过滤。但是,如果我现在输入其他东西,它不打印任何东西,数组为空,它保存数据。任何建议将不胜感激。

过滤代码片段

 @Override
    public Filter getFilter() {

        Filter filter = new Filter() {

            @SuppressWarnings("unchecked")
            @Override
            protected void publishResults(CharSequence constraint, FilterResults results) {

                data= (List<Data>) results.values;
                notifyDataSetChanged();
            }

            @Override
            protected FilterResults performFiltering(CharSequence constraint) {

                FilterResults results = new FilterResults();
                ArrayList<Item> FilteredArrayNames = new ArrayList<Item>();

                // perform your search here using the searchConstraint String.

                constraint = constraint.toString().toLowerCase();
                for (int i = 0; i < data.size(); i++) {
                    Item dataNames = data.get(i);
                    if (dataNames.title.toLowerCase().contains(constraint.toString()))  {
                        FilteredArrayNames.add(dataNames);
                    }

                }

                results.count = FilteredArrayNames.size();
                results.values = FilteredArrayNames;
                Log.e("VALUES", results.values.toString());

                return results;
            }
        };

        return filter;
    }

活动代码片段

 text =(SearchView)findViewById(R.id.searchData);

        text.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {

                adapter.getFilter().filter(newText.toString());
                return true;
            }
        });

1 个答案:

答案 0 :(得分:0)

尝试在onQueryTextChange()方法中返回false。