Java 工具栏中的SearchView未筛选ListFragment

Java 工具栏中的SearchView未筛选ListFragment,java,android,android-listview,android-adapter,android-listfragment,Java,Android,Android Listview,Android Adapter,Android Listfragment,我试图在ListFragment的工具栏中实现一个SearchView,但由于某些原因,筛选不起作用。SearchView和键盘显示正常,但在我键入内容时,ListView不会被过滤 片段类 适配器类 SearchView上缺少OnQueryTextListener,只需附加一个,以便适配器知道何时进行筛选: searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public

我试图在ListFragment的工具栏中实现一个SearchView,但由于某些原因,筛选不起作用。SearchView和键盘显示正常,但在我键入内容时,ListView不会被过滤

片段类

适配器类

SearchView上缺少OnQueryTextListener,只需附加一个,以便适配器知道何时进行筛选:

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

    @Override public boolean onQueryTextChange(String newText) {
        mAdapter.getFilter().filter(newText);
        return true;
    }
});

您需要在ListView上调用setTextFilterEnabledtrue。但是,如果您检查,您使用的适配器类必须实现。我以前有过这一点,并在没有意识到它会影响过滤功能的情况下将其注释掉,谢谢。
public class MyListAdapter extends BaseAdapter implements Filterable {

    private List<Product> myList;
    private List<Product> myListFull;
    private LayoutInflater mInflater;

    public MyListAdapter(List<Product> data, Context context) {
        myList = data;
        myList = new ArrayList(myList);
        myListFull = new ArrayList(myList);
        mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        return myList.size();
    }

    @Override
    public Object getItem(int position) {
        return myList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        MyListAdapter.ViewHolder holder;

        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.listitem, parent, false);
            holder = new MyListAdapter.ViewHolder();

            holder.title = convertView.findViewById(R.id.listitem_title);
            holder.description = convertView.findViewById(R.id.listitem_subtitle);

            convertView.setTag(holder);
        } else {
            holder = (MyListAdapter.ViewHolder) convertView.getTag();
        }


        Product mProduct = (Product)getItem(position);
        holder.title.setText(mProduct.getProductName());
        holder.description.setText(mProduct.getProductDescription());

        return convertView;
    }


    /**
     * View holder
     */
    static class ViewHolder {
        private TextView title;
        private TextView description;
    }

    @Override
    public Filter getFilter() {
        return exampleFilter;
    }

    private Filter exampleFilter = new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            List<Product> filteredList = new ArrayList<>();

            if (constraint == null || constraint.length() == 0) {
                filteredList.addAll(myListFull);
            } else {
                String filterPattern = constraint.toString().toLowerCase().trim();

                for (Product item : myListFull) {
                    if (item.getProductName().toLowerCase().contains(filterPattern)) {
                        filteredList.add(item);
                    }
                }
            }

            FilterResults results = new FilterResults();
            results.values = filteredList;

            return results;
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            myList.clear();
            myList.addAll((List<Product>) results.values);
            notifyDataSetChanged();
        }
    };
}
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
    @Override public boolean onQueryTextSubmit(String query) {
        return false;
    }

    @Override public boolean onQueryTextChange(String newText) {
        mAdapter.getFilter().filter(newText);
        return true;
    }
});