【问题标题】:Increment counter with button click in recyclerview ( of cardview )在 recyclerview 中单击按钮增加计数器(在 cardview 中)
【发布时间】:2020-07-11 12:37:26
【问题描述】:

我正在开发使用 RecyclerView 的应用程序。我在每张卡片中都有一个按钮,当点击它时,它将计算点击次数并将其显示在该特定卡片的 TextView 中。应用程序在我运行时崩溃(逻辑错误)。我究竟做错了什么 ? (当模型中的 counter = counter 时,我想将复选框设置为 true )

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

}

【问题讨论】:

  • 可以加logcat吗?
  • 这是逻辑错误,当我点击卡 (1) 中的 btn 然后点击卡 (2) 上的 btn 时,计数器从 2 而不是 1 开始
  • 为您的应用提供 GIF
  • 试着让它 count = count+1 而不是 count ++
  • 不工作,但感谢您尝试帮助我。

标签: java android android-recyclerview android-adapter android-cardview


【解决方案1】:

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)。

【讨论】:

    【解决方案2】:

    因为您将 "counter" 声明为 global ,所以您必须将 counter 添加到您的模型中

    【讨论】:

    • 你不明白我的意思,我希望在每张卡片中单击 btn 时显示文本 ++,并且当文本中的计数器等于模型中的计数器时复选框为真,但现在当我单击 btn在卡片中然后单击另一张卡片文本中的计数器从 2 而不是 1 开始
    • 您的计数器是全球性的,每次点击都会增加您的计数器值。您必须将计数器作为全局变量删除并将其添加到您的模型中
    • 你能举个例子吗?因为我尝试了很多次
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    相关资源
    最近更新 更多