Increment counter with button click in recyclerview ( of cardview )
I am working on app that using RecyclerView. I have a Button in each card that when clicked, will count the number of clicks and display it in a TextView in that particular card. The app crashes (Logic Error ) when I run it. What am I doing wrong ? ( I want to setcheck the check box true when counter = counter in Model )
public class MorAdapter extends RecyclerView.Adapter<MorAdapter.HViewholder> { private ArrayList<ZekeritemModel> model=new ArrayList<>(); public MorAdapter(ArrayList<ZekeritemModel> models,Context context) { this.model = models; } @Override public HViewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext()); View v = layoutInflater.inflate(R.layout.mor_items, parent, false); return new HViewholder(v); } @Override public void onBindViewHolder(@NonNull MorAdapter.HViewholder holder, int position) { holder.plusbtn.setOnClickListener(new View.OnClickListener() { int count =0; @Override public void onClick(View v) { count++; holder.plustext.setText(Integer.toString(count)); if (count==model.get(position).getCounter()){ holder.checkBox.setChecked(true);} } }); } @Override public int getItemCount() { return model.size(); } class HViewholder extends RecyclerView.ViewHolder { TextView plustext; CircleButton plusbtn; CheckBox checkBox; HViewholder(View itemView) { super(itemView); plusbtn=itemView.findViewById(R.id.pluss); plustext=itemView.findViewById(R.id.plustext); checkBox=itemView.findViewById(R.id.checkk); } }
}
add currentCount
property to your model ZekeritemModel
so your model became
public class ZekeritemModel { .... your code .... int currentCount = 0; // add your getter and setter .. }
change your onBind to
@Override public void onBindViewHolder(@NonNull MorAdapter.HViewholder holder, int position) { // get current item final ZekeritemModel item = model.get(position); int count = item.getCurrentCount(); // set value of counter inside textview holder.plustext.setText(Integer.toString(count)); holder.plusbtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { count++; item.setCurrentCount(count); holder.plustext.setText(Integer.toString(count)); if (count==model.get(position).getCounter()){ holder.checkBox.setChecked(true);} } }); }
NOTE may code some typo or miss some taps, spaces, parenthesis (as i Have no IDE now).
Because you declared "counter" as global , you must to add counter to your model