Установите флажок и снимите флажок

package com.example.adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.util.SparseBooleanArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;
import android.widget.Toast;

import com.example.aayushchaubey.meetdax.R;
import com.google.android.gms.tasks.Task;
import com.google.firebase.firestore.QuerySnapshot;

import java.util.ArrayList;
import java.util.HashMap;

public class DifferentGenderServicesAdapter2 extends RecyclerView.Adapter {

    private Task<QuerySnapshot> task;
    String id, servicename;
    ArrayList<String> serviceArray = new ArrayList<>();
    ArrayList<Integer> costArray = new ArrayList<>();
    ArrayList<ArrayList<String>> stylistIdArray = new ArrayList<>();
    ArrayList<Integer>durationArray=new ArrayList<>();

    TextView serviceTv, durationTv;
    int count = 0;
    String strService;
    ArrayList<String> keyArr = new ArrayList<>();
    ArrayList<String>serviceDocumentId=new ArrayList<>();
    ArrayList<String>selectedServiceId=new ArrayList<>();

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

    ArrayList<Integer>selectedServiceCost=new ArrayList<>();
    ArrayList<Integer>durationArr=new ArrayList<>();
    String serviceId,strStylist,strDuration;
    ArrayList<String>stylist=new ArrayList<>();
    ArrayList<ArrayList<String>>selectedStylistId=new ArrayList<>();

    public DifferentGenderServicesAdapter2(Task<QuerySnapshot> task, ArrayList<String> id, TextView servicesTv, TextView durationTv) {
        this.task = task;
        this.serviceTv = servicesTv;
        this.durationTv = durationTv;
        this.serviceDocumentId=id;
        count = task.getResult().size();
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.services_item, parent, false);
        return new DifferentGenderServicesAdapter2.listViewHolder(view);
    }

    @Override
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
        try {
            ((listViewHolder) holder).servicenameTv.setText(task.getResult().getDocuments().get(position).get("name").toString());
            ((listViewHolder) holder).serviceCost.setText(task.getResult().getDocuments().get(position).get("price").toString());

            servicename = task.getResult().getDocuments().get(position).get("name").toString();
            Integer price = task.getResult().getDocuments().get(position).getLong("price").intValue();
            serviceArray.add(servicename);
            costArray.add(price);

            ArrayList<HashMap<String,String>>stylistArr=new ArrayList<>();
            stylistArr=(ArrayList<HashMap<String, String>>)task.getResult().getDocuments().get(position).get("services");
            ArrayList<String> stylistsId = new ArrayList<String>();

            stylistsId.clear();

            for (int i=0;i<stylistArr.size();i++){
                strStylist=stylistArr.get(i).get("stylist").toString();
                strDuration=stylistArr.get(i).get("duration").toString();
                stylistsId.add(strStylist);
                durationArray.add(Integer.parseInt(strDuration));
            }
            stylistIdArray.add(stylistsId);

            ((listViewHolder) holder).checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                    if (((listViewHolder) holder).checkBox.isChecked()){
                        String service=serviceArray.get(position);
                        selectedServiceArray.add(service);
                        serviceTv.setText(selectedServiceArray.toString().replaceAll("\\[|\\]", ""));

                    }else {
                        selectedServiceArray.remove(position);
                        if (selectedServiceArray.size()== 0) {
                            serviceTv.setText("0");
                        } else {
                            serviceTv.setText(selectedServiceArray.toString());
                        }
                    }
                }
            });

            } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public ArrayList<String> getServiceId() {
        return selectedServiceId;
    }

    public ArrayList<String> getServices() {
        return selectedServiceArray;
    }

    public Integer getCostArray() {
        Integer cost = null;
        if (selectedServiceCost.size()>1){
            cost=selectedServiceCost.get(0)+selectedServiceCost.get(1);
        }else {
            cost=selectedServiceCost.get(0);
        }
        return cost;
    }

    public Integer getDurationArr() {
        Integer duration=null;
        if (durationArr.size()>1){
            duration=durationArr.get(0)+durationArr.get(1);
        }else {
            duration=durationArr.get(0);
        }
        return duration;
    }
    public ArrayList<ArrayList<String>> getSelectedStylistId() {
        return selectedStylistId;
    }

    @Override
    public int getItemCount() {
        return count;
    }
    private class listViewHolder extends RecyclerView.ViewHolder {

        private CheckBox checkBox;
        private TextView servicenameTv, serviceCost;
        int count = 0;
        String strService;

        public listViewHolder(final View itemView) {
            super(itemView);
            try {
                servicenameTv = (TextView) itemView.findViewById(R.id.damerServiceTV);
                serviceCost = (TextView) itemView.findViewById(R.id.damerRsTV);
                checkBox = (CheckBox) itemView.findViewById(R.id.checkBox);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

Это recycleradapter, который я использую для заполнения массива и флажка. Я хочу установить текст для выбранных элементов. Если я снимаю выделение элементов, я хочу удалить текст из текстового представления. Когда я выбираю один элемент, выберите и отмените выбор, работает правильно. Если бы у меня было больше чем один, или если я выбираю и удаляю несколько раз, он не работает, давая ошибку индекса

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
54
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Сделай это так : -

if (checkbox.isChecked){
    String service=serviceArray.get(getAdapterPosition)
    selectedServiceArray.add(service);
    holder.serviceNameTv.setText(selectedServiceArray.toString);
}
else{
    selectedServiceArray.remove(getAdapterPosition);
if (selectedServiceArray.size = 0) {
 holder.serviceNameTv.setText("0");
} else{
 holder.serviceNameTv.setText(selectedServiceArray.toString);
}
Ответ принят как подходящий

Вы пытаетесь удалить элемент в данном выделении ReciclerView, но эта позиция неверна, потому что вы делаете:

selectedServiceArray.add(service); 

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

if (checkbox.isChecked){
   String service=serviceArray.get(getAdapterPosition);
   selectedServiceArray.add(service);
   holder.serviceNameTv.setText(selectedServiceArray.toString);
} else {
  String service=serviceArray.get(getAdapterPosition);
  selectedServiceArray.remove(service);  
  holder.serviceNameTv.setText(selectedServiceArray.toString);
}

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