Skip to content Skip to sidebar Skip to footer

Android Recyclerview Checkbox Checks Itself

I have a RecyclerView which has a checkbox and textview.Numbers 10,20,30,40... till 500 should be shown in textview.The Checked checkboxes should add the numbers in the textview co

Solution 1:

You must store your checkbox state. You can do that in your model, for example:

classModel{
    String title;
    boolean checked;
}

Next you must pass List of Model items to your adapter and check/uncheck checkbox determined by your model.

if (listOfItems.get(position).checked) {
    viewHolder.checkbox.setChecked(true);
} else {
    viewHolder.checkbox.setChecked(false);
}

Remember that you always need to manage opposite state of views (like checkbox or visibility of view) in adapter.

Solution 2:

It's normal. You are not setting your checkbox selected or not. You are selecting one and View holder keeps it selected

You may look at my example. You can do something like that:

@OverridepublicvoidonBindViewHolder(ViewHolder holder, finalint position) {
        finalDatadata= myItems.get(position);

        //in some cases, it will prevent unwanted situations
        holder.checkBox.setOnCheckedChangeListener(null);

        //if true, your checkbox will be selected, else unselected
        holder.checkBox.setChecked(data.isSelected());

        holder.checkBox.setOnCheckedChangeListener(newOnCheckedChangeListener() {
                @OverridepublicvoidonCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    //set your object's last status
                    data.setSelected(isChecked);
            }
        });

    }

inside your onBindViewHolder you have to set your checkbox either checked or unchecked. if true, your checkbox will be selected, else unselected

holder.checkBox.setChecked(boolean);

Solution 3:

Try This:

publicclassRecyclerAdapterextendsRecyclerView.Adapter<RecyclerAdapter.RecyclerHolder>
{
private OnClickListener onClickListener;
privateintsum=0;

    @NonNull@Overridepublic RecyclerHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        returnnewRecyclerHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_lyt,parent,false));
    }

    @OverridepublicvoidonBindViewHolder(@NonNull RecyclerHolder holder, finalint position) {
        holder.number.setText(Integer.toString((Integer) alldata.get(position)));
        final String text=holder.number.getText().toString();


        holder.checkBox.setOnCheckedChangeListener(newCompoundButton.OnCheckedChangeListener() {
            @OverridepublicvoidonCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(isChecked){
                    sum += Integer.parseInt(holder.number.getText().toString());
                }else{
                    sum -= Integer.parseInt(holder.number.getText().toString());
                }
                if (onClickListener != null) {
                    onClickListener.onItemClick(sum);
                }
        });


    }

    @OverridepublicintgetItemCount() {
        return alldata.size();
    }

    publicclassRecyclerHolderextendsRecyclerView.ViewHolder
    {
        TextView number;
        CheckBox checkBox;
        publicRecyclerHolder(View itemView) {
            super(itemView);
            number=itemView.findViewById(R.id.number);
            checkBox=itemView.findViewById(R.id.check);


        }
    }

    publicvoidsetOnClickListener(OnClickListener onClickListener) {
        this.onClickListener = onClickListener;
    }

    publicinterfaceOnClickListener {
        voidonItemClick(int sum);
    }
}

Now In activity use adapter instance like this:

privateRecyclerAdapter adapter;
...
...
cardAdapter.setOnClickListener(newCardAdapter.OnClickListener() {
        @OverridepublicvoidonItemClick(int sum) {
            txtSum.setText(String.valueOf(sum));
    });

Solution 4:

You need to have a field (like "isSelected") in your model class so that all the checked entries can be tracked.you can try following:

checkboxRecyclerView

Solution 5:

Basically, RecyclerView recycles the view so you need a model to store the state of the checkbox.

publicclassRecyclerAdapterextendsRecyclerView.Adapter<RecyclerAdapter.RecyclerHolder> {

    private List<Model> alldata = newArrayList<>();

    @NonNull@Overridepublic RecyclerHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        returnnewRecyclerHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_lyt, parent, false));
    }

    @OverridepublicvoidonBindViewHolder(@NonNull RecyclerHolder holder, finalint position) {
        finalModelmodel= alldata.get(position);

        holder.number.setText(String.valueOf(model.value));
        holder.checkBox.setOnCheckedChangeListener(newCompoundButton.OnCheckedChangeListener() {
            @OverridepublicvoidonCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                model.setChecked(isChecked); // Saves the state of the checkbox.if (checkeddata != null) {
                    if (checkeddata.size() == 0) {
                        checkeddata.add(text);

                    } else {
                        if (checkeddata.contains(model.getValue())) {
                            checkeddata.remove(model.getValue());


                        } else {
                            checkeddata.add(model.getValue());

                        }
                    }
                    Iteratoriterator= checkeddata.iterator();
                    intsumnumber=0;
                    while (iterator.hasNext()) {
                        sumnumber = sumnumber + Integer.parseInt((String) iterator.next());
                    }
                    sum.setText(Integer.toString(sumnumber));
                }
            }
        });
        holder.checkBox.setChecked(model.isChecked()); // Retrieves the state of your checkbox.
    }

    @OverridepublicintgetItemCount() {
        return alldata.size();
    }

    publicclassRecyclerHolderextendsRecyclerView.ViewHolder {
        TextView number;
        CheckBox checkBox;

        publicRecyclerHolder(View itemView) {
            super(itemView);
            number = itemView.findViewById(R.id.number);
            checkBox = itemView.findViewById(R.id.check);
        }
    }

    publicvoiddata() {
        intg=1;
        for (inti=10; i <= 500; i++) {
            if ((i / 10) == g) {
                g = g + 1;
                alldata.add(newModel(i));
            }
        }
    }

    privateclassModel {
        privateint value;
        privatebooleanchecked=false;

        Model(int value) {
            this.value = value;
        }

        publicintgetValue() {
            return value;
        }

        publicbooleanisChecked() {
            return checked;
        }

        publicvoidsetChecked(boolean checked) {
            this.checked = checked;
        }
    }
}

Post a Comment for "Android Recyclerview Checkbox Checks Itself"