【问题标题】:Why item are not showed when typing anything in the search box?为什么在搜索框中输入任何内容时项目不显示?
【发布时间】:2019-07-09 15:13:56
【问题描述】:

项目会一直显示,直到我在 SearchView 中输入任何内容,然后项目才会消失。

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

我在 RecyclerView 的适配器中添加了 getFilter 方法,并将它与 Fragemnt 中的 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();
        }
    };

}

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

【问题讨论】:

  • 感谢 T001 的编辑

标签: android search filter get fragment


【解决方案1】:

尝试像这样更改 publishResults 方法:

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

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

【讨论】:

    猜你喜欢
    • 2017-05-02
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多