public class LabelAdapter extends BaseQuickAdapter<LabelBean.DataBean.RowsBean, BaseViewHolder> {
private int mSelectedPos = -1; //变量保存当前选中的position
private List<LabelBean.DataBean.RowsBean> mDatas;
private String PAY_BUNDLE = "payload_bundle";
public LabelAdapter(@Nullable List<LabelBean.DataBean.RowsBean> data) {
super(R.layout.item_label, data);
this.mDatas = data;
}
public int getSelectedPosition() {
return mSelectedPos;
}
@Override
protected void convert(@NotNull BaseViewHolder holder, LabelBean.DataBean.RowsBean dataBean) {
holder.setText(R.id.tvTag, dataBean.getName());
RelativeLayout relSelect = holder.itemView.findViewById(R.id.relSelect);
ImageView icSelect = holder.itemView.findViewById(R.id.icSelect);
if (dataBean.isSelected()) {
icSelect.setVisibility(View.VISIBLE);
} else {
icSelect.setVisibility(View.GONE);
}
relSelect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int pos = holder.getAdapterPosition();
if (mSelectedPos > -1) {
if (mSelectedPos != pos) {
// 先取消上个item的选中状态
mDatas.get(mSelectedPos).setSelected(false);
// 传递一个payloads
Bundle oldPayload = new Bundle();
oldPayload.putBoolean(PAY_BUNDLE, false);
notifyItemChanged(mSelectedPos, oldPayload);
// 设置新itemd的选中状态
mSelectedPos = pos;
mDatas.get(mSelectedPos).setSelected(true);
Bundle newPayload = new Bundle();
newPayload.putBoolean(PAY_BUNDLE, true);
notifyItemChanged(mSelectedPos, newPayload);
}
} else {
// 设置新itemd的选中状态
mSelectedPos = pos;
mDatas.get(mSelectedPos).setSelected(true);
Bundle newPayload = new Bundle();
newPayload.putBoolean(PAY_BUNDLE, true);
notifyItemChanged(mSelectedPos, newPayload);
}
}
});
}
@Override
public void onBindViewHolder(@NotNull BaseViewHolder holder, int position, @NotNull List<Object> payloads) {
if (payloads.isEmpty()) {
onBindViewHolder(holder, position);
} else {
Bundle payload = (Bundle) payloads.get(0);
if (payload.containsKey(PAY_BUNDLE)) {
boolean aBoolean = payload.getBoolean(PAY_BUNDLE);
ImageView icSelect = holder.itemView.findViewById(R.id.icSelect);
if (aBoolean) {
icSelect.setVisibility(View.VISIBLE);
} else {
icSelect.setVisibility(View.GONE);
}
}
}
}
}
效果图: