Как добавить проверенные элементы в мой массив?

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

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

        }
    }

проверьте этот stackoverflow.com/a/54103578/7666442

AskNilesh 21.01.2019 06:03

в вашей модели сохраните логическую переменную, чтобы узнать, проверен ли этот элемент или нет, и добавьте ее в свой массив, только если он проверен

Vivek Mishra 21.01.2019 06:05

@NileshRathod я хочу добавить выбранные имена в свой новый список массивов, пожалуйста, внимательно проверьте вопрос

khimji 21.01.2019 06:06

@VivekMishra смотрите тост, как только пользователь проверит, я получаю имена животных, я хочу добавить проверенные в свой список предупреждений.

khimji 21.01.2019 06:07

@khimjiЯ внимательно проверил вопрос, вам нужно внимательно проверить связанный ответ, используя этот ответ, вы получите подсказку, и, пожалуйста, будьте добры к сообществу, никто здесь не пишет код для вас, мы все здесь друг для друга

AskNilesh 21.01.2019 06:07

Вы на правильном пути, но вам не нужен цикл, чтобы добавить отмеченный элемент в список. Точно так же, как вы показываете свой тост, добавьте этот конкретный элемент в свой отмеченный список.

Vivek Mishra 21.01.2019 06:13

@NileshRathod, какие бы элементы ни проверял пользователь, я хочу создать еще один список массивов и этот список массивов, который я хочу использовать для другого просмотра повторного использования, это то, что я пытаюсь

khimji 21.01.2019 06:14

@VivekMishra тогда выдает ошибку и заставляет преобразовать мой arraylist в строку

khimji 21.01.2019 06:21

ваше объявление alertViewList неверно. Он должен быть таким же, как ваш imageModelArrayList

Vivek Mishra 21.01.2019 06:22
0
9
670
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

Возможно ли, я могу создать еще один массив Uri, как это?

khimji 22.01.2019 12:03

Это должно быть хорошо, пока вы удерживаете позицию элемента, который хотите сохранить.

Adn 27.01.2019 03:04

В классе Пользовательский адаптер

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

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

Другие вопросы по теме