如何将选中的项目添加到我的数组列表中?

How to add checked items to my arraylist?

您好,我正在使用带复选框的 recyclerview,现在我正在尝试的是用户检查的任何列表项,我想将这些项目添加到我的数组列表中,现在它不起作用并且它添加所有列表项而不是添加检查的。以下是我的代码 adapter.can 有人帮我解决这个问题吗?

public static class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewHolder> {

        private LayoutInflater inflater;
        public static ArrayList<Model> imageModelArrayList;
        private Context ctx;


        public CustomAdapter(Context ctx, ArrayList<Model> imageModelArrayList) {

            inflater = LayoutInflater.from(ctx);
            this.imageModelArrayList = imageModelArrayList;
            this.ctx = ctx;
        }

        @Override
        public CustomAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

            View view = inflater.inflate(R.layout.rv_item, parent, false);
            MyViewHolder holder = new MyViewHolder(view);

            return holder;
        }

        @Override
        public void onBindViewHolder(final CustomAdapter.MyViewHolder holder, int position) {

            holder.checkBox.setText("Checkbox " + position);
            holder.checkBox.setChecked(imageModelArrayList.get(position).getSelected());
            holder.tvAnimal.setText(imageModelArrayList.get(position).getAnimal());
            alertviewlist =new ArrayList<ArrayList<Model>>();
            // holder.checkBox.setTag(R.integer.btnplusview, convertView);
            holder.checkBox.setTag(position);
            holder.checkBox.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    Integer pos = (Integer) holder.checkBox.getTag();
                    Toast.makeText(ctx, imageModelArrayList.get(pos).getAnimal() + " clicked!", Toast.LENGTH_SHORT).show();

                    //alertviewlist.addAll(imageModelArrayList);
                    for (int i = 0; i < imageModelArrayList.size(); i++) {
                        alertviewlist.add(i, imageModelArrayList);
                    }
                    System.out.println(alertviewlist.size());
                    if (imageModelArrayList.get(pos).getSelected()) {
                        imageModelArrayList.get(pos).setSelected(false);
                    } else {
                        imageModelArrayList.get(pos).setSelected(true);
                    }
                }
            });


        }

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

        class MyViewHolder extends RecyclerView.ViewHolder {

            protected CheckBox checkBox;
            private TextView tvAnimal;

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

                checkBox = (CheckBox) itemView.findViewById(R.id.cb);
                tvAnimal = (TextView) itemView.findViewById(R.id.animal);
            }

        }
    }

首先,您要将 alertViewList 设为列表项列表吗?这是你的 alertviewlist:

alertviewlist = new ArrayList<ArrayList<Model>>();

根据你的描述,我想你想要做的是一个存储模型的列表吧?那么应该是:

alertviewlist = new ArrayList<Model>();

并且为了存储模型,您不需要将 imageModelArrayList 的列表添加到 alertviewlist 中。您只需将 imageModelArrayList 中具有给定 pos 的单个模型添加到您的 alertviewlist 中。我在这里更改您的 checkBox.setOnClickListener 的代码:

holder.checkBox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Integer pos = (Integer) holder.checkBox.getTag();
                Toast.makeText(ctx, imageModelArrayList.get(pos).getAnimal() + " clicked!", Toast.LENGTH_SHORT).show();

                //store your model into alertviewlist
                alertviewlist.add(imageModelArrayList.get(pos))

                System.out.println(alertviewlist.size());
                if (imageModelArrayList.get(pos).getSelected()) {
                    imageModelArrayList.get(pos).setSelected(false);
                } else {
                    imageModelArrayList.get(pos).setSelected(true);
                }
            }
        });

CustomAdapter class

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewHolder> {

private LayoutInflater inflater;
public static ArrayList<Model> imageModelArrayList;
private Context ctx;


public CustomAdapter(Context ctx, ArrayList<Model> imageModelArrayList) {

    inflater = LayoutInflater.from(ctx);
    this.imageModelArrayList = imageModelArrayList;
    this.ctx = ctx;
}

@Override
public CustomAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View view = inflater.inflate(R.layout.rv_item, parent, false);
    MyViewHolder holder = new MyViewHolder(view);

    return holder;
}

@Override
public void onBindViewHolder(final CustomAdapter.MyViewHolder holder, int position) {
    final Model dResult = imageModelArrayList.get(position);
    holder.checkBox.setOnCheckedChangeListener(null);
    holder.checkBox.setChecked(dResult.getSelected());
    holder.checkBox.setTag(dResult);

    if (dResult.isSelected()) {
        holder.checkBox.setChecked(true);
        holder.checkBox.setSelected(true);
    } else {
        holder.checkBox.setChecked(false);
        holder.checkBox.setSelected(false);
    }

    holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
            if (b) {
                holder.checkBox.setSelected(true);
                dResult.setSelected(true);
            }else {
                holder.checkBox.setSelected(false);
                dResult.setSelected(false);
            }
        }
    });
}

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

class MyViewHolder extends RecyclerView.ViewHolder {

    protected CheckBox checkBox;
    private TextView tvAnimal;

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

        checkBox = (CheckBox) itemView.findViewById(R.id.cb);
        tvAnimal = (TextView) itemView.findViewById(R.id.animal);
    }
}}

然后在您的 activity class 中将 选定的项目 放入数组列表中。

ArrayList<String> SelectedList = new ArrayList<String>();

for (int i=0;i<imageModelArrayList.size;i++){
        if (imageModelArrayList.get(i).getSelected()==true){
            SelectedList.add(imageModelArrayList.get(i).getAnimal());
        }
}

然后就可以将选中的动物名称放入列表中了。