Android Recyclerview Checkbox Checks Itself
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:
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"