我有一些文字和複選框的回收站視圖我想當用戶選擇複選框只有當前項目是選擇,但當我向下滾動列表 另一個項目也被選中我不知道是什麼問題我的代碼。 我檢出了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
這樣簡單的問題的五個答案:)你應該跟蹤複選框狀態添加到您的模型或與狀態數組 –