我有一些文字和复选框的回收站视图我想当用户选择复选框只有当前项目是选择,但当我向下滚动列表 另一个项目也被选中我不知道是什么问题我的代码。 我检出了StackOverflow提供的所有解决方案,但没有人为我工作。 请告诉我我的代码有什么问题?复选框!当选择一个项目另一个项目也在RecyclerView中被选中?
我的适配器类是:提前
public class MyAdapter extends
RecyclerView.Adapter<MyAdapter.MyViewHolder> {
Context context;
List<GetAdvReqPackagesListResponse.PackageList> packageList;
private View rootView;
public MyAdapter (List<GetAdvReqPackagesListResponse.PackageList> packageList,
Context context) {
this.context = context;
this.packageList = packageList;
}
public class MyViewHolder extends RecyclerView.ViewHolder {
TextView textPackageCode, textPackageDesc, textLaborTU, textLaborAmt,
textPartsCount, textPartsAmt, textPackageTotal;
CheckBox chkBoxSelectPackage;
public MyViewHolder(View rowView) {
super(rowView);
rootView = rowView;
textPackageCode = (TextView) rowView.findViewById(R.id.textPackageCode);
textPackageDesc = (TextView) rowView.findViewById(R.id.textPackageDesc);
textLaborTU = (TextView) rowView.findViewById(R.id.textLaborTU);
textLaborAmt = (TextView) rowView.findViewById(R.id.textLaborAmt);
textPartsCount = (TextView) rowView.findViewById(R.id.textPartsCount);
textPartsAmt = (TextView) rowView.findViewById(R.id.textPartsAmt);
textPackageTotal = (TextView) rowView.findViewById(R.id.textPackageTotal);
chkBoxSelectPackage = (CheckBox) rowView.findViewById(R.id.chkBoxSelectPackage);
}
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.shopping_cart_row_item_adv_req_package_list, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
final GetAdvReqPackagesListResponse.PackageList packageList1 = packageList.get(position);
holder.textPackageCode.setText(packageList.get(position).code);
holder.textPackageDesc.setText(packageList.get(position).description);
if (packageList.get(position).laborTU.equalsIgnoreCase("0"))
holder.textLaborTU.setText(String.valueOf("-"));
else
holder.textLaborTU.setText(packageList.get(position).laborTU);
if (packageList.get(position).laborAmt.equalsIgnoreCase("0"))
holder.textLaborAmt.setText(String.valueOf("-"));
else
holder.textLaborAmt.setText(CurrencySymbol.currencySymbol(Constant.appCurrencyCode) + " "
+ packageList.get(position).laborAmt);
if (packageList.get(position).partCount.equalsIgnoreCase("0"))
holder.textPartsCount.setText(String.valueOf("-"));
else
holder.textPartsCount.setText(packageList.get(position).partCount);
if (packageList.get(position).partAmt.equalsIgnoreCase("0"))
holder.textPartsAmt.setText(String.valueOf("-"));
else
holder.textPartsAmt.setText(CurrencySymbol.currencySymbol(Constant.appCurrencyCode) + " "
+ packageList.get(position).partAmt);
holder.chkBoxSelectPackage.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked == true) {
holder.chkBoxSelectPackage.setChecked(true);
holder.textPackageCode.setTextAppearance(context, R.style.font_color_green_size_13sp);
holder.textPackageDesc.setTextAppearance(context, R.style.font_color_green_size_13sp);
holder.textLaborTU.setTextAppearance(context, R.style.font_color_green_size_13sp);
holder.textLaborAmt.setTextAppearance(context, R.style.font_color_green_size_13sp);
holder.textPartsCount.setTextAppearance(context, R.style.font_color_green_size_13sp);
holder.textPartsAmt.setTextAppearance(context, R.style.font_color_green_size_13sp);
} else if (isChecked == false) {
holder.chkBoxSelectPackage.setChecked(false);
holder.textPackageCode.setTextAppearance(context, R.style.font_small_color_black_size_13sp);
holder.textPackageDesc.setTextAppearance(context, R.style.font_small_color_black_size_13sp);
holder.textLaborTU.setTextAppearance(context, R.style.font_small_color_black_size_13sp);
holder.textLaborAmt.setTextAppearance(context, R.style.font_small_color_black_size_13sp);
holder.textPartsCount.setTextAppearance(context, R.style.font_small_color_black_size_13sp);
holder.textPartsAmt.setTextAppearance(context, R.style.font_small_color_black_size_13sp);
}
}
});
}
@Override
public int getItemCount() {
return packageList.size();
}
}
感谢。
这是很容易的,你应该清除或覆盖在每个检查状态'onBindViewHolder '。持有人被重复使用,因此您可以在项目 –
之前已经“绑定”如何做到这一点? @Eugen Martynon – Champandorid
这样简单的问题的五个答案:)你应该跟踪复选框状态添加到您的模型或与状态数组 –