RecyclerView列表单选

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);
                }
            }
        }
    }
}

效果图:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是在RecyclerView中实现单选的示例代码: 1. 首先,在RecyclerView的Adapter中添加一个成员变量来保存当前选中的位置: ```java private int mSelectedPosition = -1; ``` 2. 在ViewHolder的构造函数中设置itemView的点击事件,用于处理单选逻辑: ```java public MyViewHolder(View itemView) { super(itemView); itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 获取当前点击的位置 int position = getAdapterPosition(); // 如果当前位置已经选中,则不做处理 if (position == mSelectedPosition) { return; } // 取消上一个选中的状态 notifyItemChanged(mSelectedPosition); // 设置新的选中状态 mSelectedPosition = position; notifyItemChanged(mSelectedPosition); } }); } ``` 3. 在Adapter的onBindViewHolder方法中根据当前位置是否选中来设置itemView的状态: ```java @Override public void onBindViewHolder(MyViewHolder holder, int position) { // 设置itemView的状态 if (position == mSelectedPosition) { holder.itemView.setSelected(true); } else { holder.itemView.setSelected(false); } // 其他操作 } ``` 注意:在itemView的布局文件中需要将android:background属性设置为可选中状态,例如: ```xml <LinearLayout android:id="@+id/item_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?android:attr/selectableItemBackground" android:orientation="vertical"> <!-- 其他控件 --> </LinearLayout> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值