Возврат к первому и последнему выбору элементов, выбранных при выборе только первого - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть recycle-view с пользовательскими данными, и у каждого элемента recycle-view есть флажок. проблема в том, что, когда я проверяю флажок первого элемента, флажок последнего элемента выбирается автоматически, я пробовал несколько вещей, но они не работают

Может кто-нибудь помочь мне с этим Вот мой код адаптера

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {

    private Context context;
    private List<Upload> uploads;
    private static ArrayList<Upload> uploadList = new ArrayList<>();
    private FirebaseStorage mStorage;
    private DatabaseReference mDatabase;
    InvoiceRepository invoiceRepository;
    OnRecycleClickListener recycleClickListener;

    public MyAdapter(Context context, List<Upload> uploads, OnRecycleClickListener onRecycleClickListener) {
        this.uploads = uploads;
        this.context = context;
        this.recycleClickListener = onRecycleClickListener;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.layout_images, parent, false);
        ViewHolder viewHolder = new ViewHolder(v);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {
        final Upload upload = uploads.get(position);


        //  holder.textViewName.setText(upload.getName());
        holder.textViewdesc.setText(upload.getDesc());

        Glide.with(context).load(upload.getUrl()).placeholder(R.drawable.loading).into(holder.imageView);

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


                final Dialog dialog = new Dialog(holder.imagecard.getContext());
                dialog.setContentView(R.layout.customdialogboximagedisplay);
                dialog.getWindow().getAttributes().windowAnimations = R.style.DialogAnimation;

                final ImageView image = (ImageView) dialog.findViewById(R.id.floorimage);
                Glide.with(holder.imagecard.getContext())
                        .load(upload.getUrl())
                        .placeholder(R.drawable.loading)
                        .into(image);

                dialog.show();
                Window window = dialog.getWindow();
                window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, 
    ViewGroup.LayoutParams.WRAP_CONTENT);

            }
        });

        holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    uploadList.add(upload);
                    recycleClickListener.onRecycleClick(uploadList);
                } else if (!isChecked) {
                    uploadList.remove(position);
                    recycleClickListener.onRecycleClick(uploadList);
                }
            }
        });
   }

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

    class ViewHolder extends RecyclerView.ViewHolder {

        //  public TextView textViewName;
        public EditText textViewdesc;
        public ImageView imageView;
        public CardView imagecard;
        public CheckBox checkBox;
        public Button Edit;


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

            //  textViewName = (TextView) itemView.findViewById(R.id.textViewName);
            textViewdesc = (EditText) itemView.findViewById(R.id.textViewdescription);
            imageView = (ImageView) itemView.findViewById(R.id.imageView);
            imagecard = (CardView) itemView.findViewById(R.id.cardimage);
            checkBox = itemView.findViewById(R.id.checkbox1);
            Edit = (Button) itemView.findViewById(R.id.Edit_desc);
        }
    }
}

Ответы [ 3 ]

0 голосов
/ 08 апреля 2020

Пожалуйста, добавьте строку ниже в вашем адаптере.

        if(uploads.contains(upload))
          mCheck.setChecked (true);
       else
          mCheck.setChecked (false);

Добавьте изменение вашего setOnCheckedChangeListener следующим образом

 holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    if(!buttonView.isPressed()) {
                      return;
                      }
                    if (isChecked) {
                        uploadList.add(upload);
                        recycleClickListener.onRecycleClick(uploadList);
                    } else if (!isChecked) {
                        uploadList.remove(position);
                        recycleClickListener.onRecycleClick(uploadList);
                    }
                }
            });
0 голосов
/ 08 апреля 2020

Попробуйте использовать

setItemViewCacheSize() in your activity.

Пожалуйста, проверьте, может ли этот ответ вам помочь: Дублирование при выборе флажка в RecyclerView

0 голосов
/ 08 апреля 2020

Вам необходимо ставить флажки на каждом onBindViewHolder. Чтобы не допустить двойного срабатывания OnCheckedChangeListener слушателей, добавьте пользовательский метод, чтобы отметить флажок в его классе. Смотрите мой ответ, как это сделать { ссылка }

...