首页 > 解决方案 > 为什么在搜索框中输入任何内容时不显示项目?

问题描述

这些项目一直显示,直到我在 SearchView 中键入任何内容,然后项目消失。

当我输入任何内容时,fullOffers 的大小似乎变为零;因为当我放入 toast 消息时,当我将它放入 for 循环时它没有出现。

我在 RecyclerView 的适配器中添加了 getFilter 方法,并将其与片段中的 SearchView 链接。

public class OffersAdapter extends RecyclerView.Adapter<OffersAdapter.ViewHolder> implements Filterable{

    Context context;
    List<offer> offers;
    List<offer> fullOffers;
    public OffersAdapter(List Offers,Context mContext){
        context = mContext;
        offers = Offers;
        fullOffers = new ArrayList<>(Offers);
    }


    public Filter getFilter() {
        return exampleFilter;
    }

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

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

                    Toast.makeText(context,"item added",Toast.LENGTH_LONG).show(); // the toast message appears

                for (offer item : fullOffers) {
                    Toast.makeText(context,"item added",Toast.LENGTH_LONG).show(); // it doesn't appear

                    if (item.getTitle().toLowerCase().contains(filterPattern)) {
                        filteredList.add(item);
                    }
                }
            }

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


            return results;
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            offers.clear();
            offers.addAll((List) results.values);
            notifyDataSetChanged();
        }
    };

}

我希望这些项目被加载到“优惠”列表中并出现

标签: androidsearchfiltergetfragment

解决方案


尝试像这样更改 publishResults 方法:

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

            offers=(List) results.values;
            notifyDataSetChanged();
        }

推荐阅读