Search code examples
javaandroidandroid-recyclerviewandroid-adapterandroid-cardview

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);
    }
}

}


Solution

  • 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).