Увеличивайте счетчик нажатием кнопки в recyclerview (cardview) - PullRequest
1 голос
/ 11 июля 2020

Я работаю над приложением, использующим RecyclerView. У меня есть кнопка на каждой карточке, которая при нажатии подсчитывает количество кликов и отображает его в TextView на этой конкретной карточке. Приложение вылетает (Logi c Error), когда я его запускаю. Что я делаю не так ? (Я хочу установить флажок true, когда counter = counter в модели)

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

}

Ответы [ 2 ]

1 голос
/ 12 июля 2020

добавьте currentCount свойство к вашей модели ZekeritemModel, чтобы ваша модель стала

public class ZekeritemModel {
.... your code 
.... 
 int currentCount = 0; 
// add your getter and setter ..

}


измените onBind на


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


ПРИМЕЧАНИЕ может закодировать опечатку или пропустить некоторые нажатия, пробелы, круглые скобки (так как у меня сейчас нет IDE).

0 голосов
/ 11 июля 2020

Поскольку вы объявили « counter » как глобальное значение, вам необходимо добавить счетчик в свою модель

...