Ich habe eine Recycler-Ansicht mit etwas Text und einem Kontrollkästchen Ich möchte, dass wenn Benutzer das Kontrollkästchen nur aktuelle Element auswählen, aber wenn ich scroll die Liste ein anderes Element wurde auch ausgewählt Ich weiß nicht, was ist das Problem mit mein Code. Ich habe alle Lösungen von StackOverflow ausgecheckt, aber niemand arbeitet für mich. Bitte sagen Sie mir, was ist das Problem mit meinem Code?Checkbox! Wenn Sie einen Artikel auswählen Ein anderer Artikel wird auch in RecyclerView ausgewählt?
Meine Adapter Klasse:
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();
}
}
Vielen Dank im Voraus.
Es ist ganz einfach, sollten Sie auf jeden Zustand überprüfen löschen oder zu überschreiben 'onBindViewHolder '. Halter werden wiederverwendet, so dass Sie bereits vor Artikel –
gebunden werden können. Wie geht das? @Eugen Martynon – Champandorid
Fünf Antworten für solche einfache Frage :) Sie sollten den Checkbox-Status verfolgen, indem Sie zu Ihrem Modell hinzufügen oder mit Array –