Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android recyclerview搜索筛选器不工作?_Android_Search_Filter_Android Recyclerview - Fatal编程技术网

Android recyclerview搜索筛选器不工作?

Android recyclerview搜索筛选器不工作?,android,search,filter,android-recyclerview,Android,Search,Filter,Android Recyclerview,我已经在adapter类中编写了getFilter,在mainactivity中编写了setOnQueryTextListener,但不知道问题出在哪里,因为它不是筛选或搜索请帮助我需要实现搜索筛选器回收器查看键入时必须筛选列表 //适配器类 public class MenuAdapter extends RecyclerView.Adapter<MenuAdapter.MenuViewHolder> implements Filterable { private Con

我已经在adapter类中编写了getFilter,在mainactivity中编写了setOnQueryTextListener,但不知道问题出在哪里,因为它不是筛选或搜索请帮助我需要实现搜索筛选器回收器查看键入时必须筛选列表

//适配器类

public class MenuAdapter extends RecyclerView.Adapter<MenuAdapter.MenuViewHolder> implements Filterable {

    private Context mCtx;
    private List<Menus> menusList;
    private List<Menus> menusFilteredList;

    public MenuAdapter(Context mCtx, List<Menus> menusList) {
        this.mCtx = mCtx;
        this.menusList = menusList;
    }


    @Override
    public MenuAdapter.MenuViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(mCtx);
        View view = inflater.inflate(R.layout.menu_list, null);
        return new MenuAdapter.MenuViewHolder(view);
    }

    @Override
    public void onBindViewHolder(MenuAdapter.MenuViewHolder holder, final int position) {
        final Menus menus = menusList.get(position);

        //loading the image
        Glide.with(mCtx)
                .load(menus.getMenuimage())
                .into(holder.menuimage);


        holder.menuname.setText(menus.getMenuname());
        holder.cardview.setCardBackgroundColor(Color.parseColor(menus.getMenubg()));

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // Toast.makeText(mCtx, "" + menus.getMenuname(), Toast.LENGTH_SHORT).show();


                if (menus.getMenuurl().getBytes().length == 0)
                {

                    Toast.makeText(mCtx, "Not Available.", Toast.LENGTH_SHORT).show();
                }
                else
                {
                    Intent web = new Intent(mCtx,WebActivity.class);
                    web.putExtra("url",menus.getMenuurl());
                    web.putExtra("urltitle",menus.getMenuname());
                    mCtx.startActivity(web);
                    ((Activity)mCtx).finish();

                }
            }
        });
    }

    @Override
    public int getItemCount() {
        return menusFilteredList.size();
    }

    @Override
    public Filter getFilter() {
        return new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence charSequence) {

                String charString = charSequence.toString();

                if (charString.isEmpty()) {

                    menusFilteredList = menusList;

                } else {

                   // List<Menus> filteredList = new List<>();
                    List<Menus> filteredList = new ArrayList<>();
                    for (Menus menus : menusList) {

                        if (menus.getMenuname().toLowerCase().contains(charString) || menus.getMenuurl().toLowerCase().contains(charString)) {

                            filteredList.add(menus);
                        }
                    }

                    menusFilteredList = filteredList;
                }

                FilterResults filterResults = new FilterResults();
                filterResults.values = menusFilteredList;
                return filterResults;
            }

            @Override
            protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
                menusList = (ArrayList<Menus>) filterResults.values;
                notifyDataSetChanged();
            }
        };
    }

    class MenuViewHolder extends RecyclerView.ViewHolder {
        ImageView menuimage;
        TextView menuname;
        CardView cardview;

        public MenuViewHolder(View itemView) {
            super(itemView);


            menuimage = itemView.findViewById(R.id.menuimage);
            menuname = itemView.findViewById(R.id.menuname);
            cardview  = itemView.findViewById(R.id.cardview);

        }

    }
}

您应该也设置计数值

 @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        filteredList.clear();
        final FilterResults results = new FilterResults();
        if (constraint.length() == 0) {
            filteredList.addAll(menusList);
        } else {
            final String filterPattern = constraint.toString().toLowerCase().trim();

           for (Menus menus : menusList) {

                    if (menus.getMenuname().toLowerCase().contains(charString) || menus.getMenuurl().toLowerCase().contains(charString)) {

                        filteredList.add(menus);
                    }
                }
        }
        System.out.println("Count Number " + filteredList.size());
        results.values = filteredList;
        results.count = filteredList.size();
        return results;
    }

请注意:筛选列表应在初始阶段仅在适配器中加载所有列表项

doenst filteredits正在工作问题在于侦听器
 @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        filteredList.clear();
        final FilterResults results = new FilterResults();
        if (constraint.length() == 0) {
            filteredList.addAll(menusList);
        } else {
            final String filterPattern = constraint.toString().toLowerCase().trim();

           for (Menus menus : menusList) {

                    if (menus.getMenuname().toLowerCase().contains(charString) || menus.getMenuurl().toLowerCase().contains(charString)) {

                        filteredList.add(menus);
                    }
                }
        }
        System.out.println("Count Number " + filteredList.size());
        results.values = filteredList;
        results.count = filteredList.size();
        return results;
    }