使用场景:商品下单时候,选择优惠券——>拉出可用优惠券列表,然后选择优惠券,每次仅可以使用一张,所以用CheckBox实现了radioButton的功能。
/**
* Created by Administrator on 2019/4/24.
*/
public class SelectCouponAdapter extends RecyclerView.Adapter {
private List<CouponResponse.DateBean> arrayList;
private Context context;
private List<Boolean> list = new ArrayList<>();
public Map<Integer, Boolean> booleanMap = new HashMap<>();
private int checkedPosition;
private boolean onBind;
private SelectCouponItemListener itemListener;
public SelectCouponAdapter(Context context, List<CouponResponse.DateBean> arrayList) {
this.context = context;
this.arrayList = arrayList;
notifyDataSetChanged();
}
public void setItemListener(SelectCouponItemListener itemListener) {
this.itemListener = itemListener;
}
public void Updata(List<CouponResponse.DateBean> arrayList) {
this.arrayList = arrayList;
notifyDataSetChanged();
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_select_coupon, parent, false);
return new SelectCouponViewHolder(view);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
SelectCouponViewHolder viewHolder = (SelectCouponViewHolder) holder;
viewHolder.fillUIWithPosition(position);
}
@Override
public int getItemCount() {
return arrayList.size();
}
public class SelectCouponViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.CouponMoneyTextView)
TextView CouponMoneyTextView;
@BindView(R.id.CouponNameTextView)
TextView CouponNameTextView;
@BindView(R.id.CouponDateStartTextView)
TextView CouponDateStartTextView;
@BindView(R.id.CouponDateEndTextView)
TextView CouponDateEndTextView;
@BindView(R.id.couponRadioButton)
CheckBox couponRadioButton;
public SelectCouponViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
public void fillUIWithPosition(final int position) {
CouponMoneyTextView.setText(String.valueOf(arrayList.get(position).getCouponAmount()));
CouponNameTextView.setText(arrayList.get(position).getCouponName());
CouponDateStartTextView.setText(arrayList.get(position).getCouponValidityStartTime() + "-");
CouponDateEndTextView.setText(arrayList.get(position).getCouponValidityEndTime());
couponRadioButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked == true) {
booleanMap.clear();
booleanMap.put(position, true);
checkedPosition = position;
if (itemListener != null) {
itemListener.selectCouponWithPosition(position, arrayList.get(position).getCouponAmount(), arrayList.get(position).getCouponId());
}
} else {
booleanMap.remove(position);
if (booleanMap.size() == 0) {
checkedPosition = -1; //-1 代表一个都未选择
itemListener.selectCouponWithPosition(position,0 ,-1);
}
}
if (!onBind) {
notifyDataSetChanged();
}
}
});
onBind = true;
if (booleanMap != null && booleanMap.containsKey(position)) {
couponRadioButton.setChecked(true);
} else {
couponRadioButton.setChecked(false);
}
onBind = false;
}
}
//得到当前选中的位置
public int getCheckedPosition() {
return checkedPosition;
}
public interface SelectCouponItemListener {
void selectCouponWithPosition(int position,double OrderCouponPrice, int OrderCouponId);
}
}