Как добавить проверенные элементы в мой список? - PullRequest
0 голосов
/ 21 января 2019

Привет, я использую RecyclelerView с флажком, теперь я пытаюсь проверить, какие элементы списка проверяет пользователь, я хочу добавить эти элементы в мой массив, сейчас он не работает и добавляет все элементы списка вместо добавления отмеченных.,Ниже приведен код моего адаптера. Может ли кто-нибудь помочь мне решить эту проблему?

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);
            }

        }
    }

Ответы [ 2 ]

0 голосов
/ 21 января 2019

In 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);
    }
}}

Затем В вашем классе активности получите выбранный элемент в массив.

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());
        }
}

Затем вы можете внести имя выбранного животного в список.

0 голосов
/ 21 января 2019

Во-первых, хотите ли вы сделать 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);
                }
            }
        });
...