Android RecyclerView 实现单选 多选 反选 附源码

这篇博客介绍了如何使用Kotlin在Android的RecyclerView中实现单选、多选和反选功能。博主分享了关键代码,并提供了反选功能的实现方法。此外,还批评了网络上不试用就直接转载或收费下载的现象,鼓励读者尝试并分享自己的实现方式。
摘要由CSDN通过智能技术生成

Android recyclerview 实现单选,多选,反选等小功能。(建议直接翻到最下面克隆源码)

单选关键代码

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val fruit = fruitList[position]

        if (fruit.isChecked) {
            holder.binding.check.setImageResource(R.drawable.checked)
        } else {
            holder.binding.check.setImageResource(R.drawable.unchecked)
        }
        holder.binding.fruitImage.setImageResource(fruit.imageId)
        holder.binding.fruitName.text = fruit.name
        holder.binding.root.setOnClickListener {
            mOnItemClickListener?.onItemClick(position)
            if (checkPos != position) {
                //取消上一个位置的勾选状态
                fruitList[checkPos].isChecked = false
                notifyItemChanged(checkPos)
                //设置新的勾选状态
                checkPos = holder.bindingAdapterPosition
                fruitList[checkPos].isChecked = true
                notifyItemChanged(checkPos)
            }
        }
    }

多选关键代码

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val fruit = fruitList[position]

        if (fruit.isChecked) {
            holder.binding.check.setImageResource(R.drawable.checked)
        } else {
            holder.binding.check.setImageResource(R.drawable.unchecked)
        }
        holder.binding.fruitImage.setImageResource(fruit.imageId)
        holder.binding.fruitName.text = fruit.name
        holder.binding.root.setOnClickListener {
                if (fruitList[position].isChecked) {
                    fruit.isChecked = false
                    notifyItemChanged(position)
                } else {
                    fruit.isChecked = true
                    notifyItemChanged(position)
                }
            checkList.clear()
            fruitList.forEach {
                if (it.isChecked) {
                    checkList.add(it)
                }
            }
        }
        mOnItemClickListener?.onItemClick(position, checkList)
    }

实现反选的关键代码

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val fruit = fruitList[position]

        if (fruit.isChecked) {
            holder.binding.check.setImageResource(R.drawable.checked)
        } else {
            holder.binding.check.setImageResource(R.drawable.unchecked)
        }
        holder.binding.fruitImage.setImageResource(fruit.imageId)
        holder.binding.fruitName.text = fruit.name
        holder.binding.root.setOnClickListener {
            if (fruitList[position].isChecked) {
                fruit.isChecked = false
                notifyItemChanged(position)
            } else {
                fruit.isChecked = true
                notifyItemChanged(position)
            }
            checkList.clear()
            fruitList.forEach {
                if (it.isChecked) {
                    checkList.add(it)
                }
            }
        }
        mOnItemClickListener?.onItemClick(position, checkList)
    }

    /**
     * 反选方法
     *
     * @return List<Fruit> 返回返选后的集合
     */
    fun setInvertSelection(): List<Fruit> {
        val newList = ArrayList<Fruit>()
        fruitList.forEach {
            if (!it.isChecked) {
                newList.add(it)
            }
        }
        fruitList.forEach {
            it.isChecked = !it.isChecked
        }
        notifyDataSetChanged()
        return newList
    }

    /**
     * 清除所有所选
     */
    fun setClear() {
        fruitList.forEach {
            if (it.isChecked) {
                it.isChecked = false
            }
        }
        notifyDataSetChanged()
    }
  1. 编写语言:kotlin(什么?不会kotlin?学吧kotlin yyds!)
  2. 实现的方法其实有很多种,自己觉得这个更简单粗暴点吧(就是自己菜不会优化)
  3. 可能对超级新手或者学习recyclerview的同学有点用吧。
  4. 有其他实现方式的大佬可以在评论区贴出你的地址大家一起学习进步
  5. 觉得有用的同学可以点个赞或者评论个yyds
  6. 这种小功能百度上一堆抄袭的自己试都不试直接转载或者贴个下载地址让你付费下载的真的是ex!
  7. 直接贴源码⬇️⬇️⬇️ 如果你上不了github评论区讲下,我传gitee
  8. GITHUB
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值