Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.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 如何按ID筛选recyclerView?_Android_Android Recyclerview - Fatal编程技术网

Android 如何按ID筛选recyclerView?

Android 如何按ID筛选recyclerView?,android,android-recyclerview,Android,Android Recyclerview,我在筛选我的recyclerView时遇到一些问题,我正在使用适配器中的“尚未筛选”在searchView中进行搜索,但我还有一个方法可以在“仅创建具有特定ID的项”时加载recyclerView 在示例中,我有一个菜单可以设置为MenuID 1、2、3、4等,而我还有一些按钮可以设置为MenuID 1、2、3、4,用于指定某个按钮所属的菜单。因此,如果我打开活动并选择菜单1,我必须只显示属于菜单1的按钮等 我已经制作了这个方法,但是我在活动中使用它,这不是一个好的实践,所以我会将它移动到我的r

我在筛选我的recyclerView时遇到一些问题,我正在使用适配器中的“尚未筛选”在searchView中进行搜索,但我还有一个方法可以在“仅创建具有特定ID的项”时加载recyclerView

在示例中,我有一个菜单可以设置为MenuID 1、2、3、4等,而我还有一些按钮可以设置为MenuID 1、2、3、4,用于指定某个按钮所属的菜单。因此,如果我打开活动并选择菜单1,我必须只显示属于菜单1的按钮等

我已经制作了这个方法,但是我在活动中使用它,这不是一个好的实践,所以我会将它移动到我的recyclerView适配器,并在适配器中进行过滤

以下是我在活动中过滤的方法:

public void FilterVariable(){


    filteredVariable = new ArrayList<>();

    // i check for all the items from the constructor if there are any item 
    // that have the same MenuID which i get with .getMenu equals to positionMenu 
    // positionMenu is an int value that i get when i press on a Menu and it's 
    // give me it's ID (onCreate by default selected menu is menu 1)

    for (VariantiConstructor varianti : variantiConstructors) {
    String data = varianti.getMenu();
    String[] items = data.split(","+positionMenu+",");


    try {
        if(items[0].equals(data)){
            //
        }else{
            filteredVariable.add(varianti);
        }
    }catch (Exception e){
        //
    }


    }
}
以下是我的适配器代码:

public class AdapterVarianti extends RecyclerView.Adapter<AdapterVarianti.ExampleViewHolder>  implements Filterable {


    private ArrayList<VariantiConstructor> variantiConstructors;
    private ArrayList<VariantiConstructor> mFilteredList;
    private OnItemClickListener mListener;

    public interface  OnItemClickListener{
        void onItemClick(int position);
    }

    public void setOnItemClickListener(OnItemClickListener listener){
        mListener = listener;
    }

    @NonNull
    @Override
    public AdapterVarianti.ExampleViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.varianti_recycler,parent,false);
        RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        v.setLayoutParams(lp);
        return new AdapterVarianti.ExampleViewHolder(v, mListener);
    }

    AdapterVarianti(ArrayList<VariantiConstructor> exampleList){
        variantiConstructors = exampleList;
        mFilteredList = variantiConstructors;
    }

    @Override
    public void onBindViewHolder(@NonNull final AdapterVarianti.ExampleViewHolder holder, final int position) {
        final VariantiConstructor item = mFilteredList.get(position);

        holder.desc.setText(item.getDeskT());
        holder.prepiu.setText(String.valueOf(item.getPrice()));
        holder.premeno.setText(String.valueOf(item.getPacq()));

        if(position % 2 == 0 ){
            holder.itemView.setBackgroundColor(Color.parseColor("#17e1a0"));

        }else if(position % 2 == 1){
            holder.itemView.setBackgroundColor(Color.parseColor("#7EC0EE"));
        }

    }


    @Override
    public Filter getFilter() {

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

                String charString = charSequence.toString();

                if (charString.isEmpty()) {

                    mFilteredList = variantiConstructors;
                } else {

                    ArrayList<VariantiConstructor> filteredList = new ArrayList<>();

                    for (VariantiConstructor androidVersion : variantiConstructors) {

                        if (androidVersion.getDeskT().toLowerCase().contains(charString)) {

                            filteredList.add(androidVersion);
                        }
                    }

                    mFilteredList = filteredList;
                }

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

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

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

    public class ExampleViewHolder extends RecyclerView.ViewHolder {

        public TextView desc;
        public TextView prepiu;
        public TextView premeno;

        ExampleViewHolder(View itemView, final OnItemClickListener listener) {
            super(itemView);

            desc = itemView.findViewById(R.id.Desc);
            prepiu = itemView.findViewById(R.id.PrePiu);
            premeno = itemView.findViewById(R.id.PreMeno);


            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(listener != null){
                        int position = getAdapterPosition();
                        if(position != RecyclerView.NO_POSITION){
                            listener.onItemClick(position);
                        }
                    }
                }
            });


        }
    }

    public void removeItem(int position) {
        variantiConstructors.remove(position);
        notifyItemRemoved(position);
    }

}