在 recyclerview(cardview)中单击按钮的增量计数器
Increment counter with button click in recyclerview ( of cardview )
我正在开发使用 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);
}
}
}
因为您将“counter”声明为全局的,所以您必须向您的模型添加计数器
将 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)。
我正在开发使用 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);
}
}
}
因为您将“counter”声明为全局的,所以您必须向您的模型添加计数器
将 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)。