You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Kotlin实现RecyclerView单选并切换Item选中状态

实现RecyclerView单选选中状态切换

步骤1:在Adapter中维护选中状态

在你的RecyclerView Adapter类里添加变量,记录当前选中的Item位置:

private var selectedPosition = -1 // -1表示初始无选中项

步骤2:绑定数据时同步选中状态UI

在onBindViewHolder方法中,根据selectedPosition判断当前Item是否被选中,设置对应的UI样式(比如背景色、选中标识):

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    val itemDate = yourDataList[position] // 替换成你实际的数据源列表变量名
    // 原有数据绑定逻辑...

    // 设置选中/未选中样式
    if (position == selectedPosition) {
        // 选中状态示例:设置背景为选中色
        holder.itemView.setBackgroundColor(ContextCompat.getColor(holder.itemView.context, R.color.recycler_item_selected))
    } else {
        // 未选中状态:恢复默认样式
        holder.itemView.setBackgroundColor(ContextCompat.getColor(holder.itemView.context, R.color.recycler_item_normal))
    }

    // 更新点击监听逻辑
    holder.itemView.setOnClickListener {
        val previousSelectedPos = selectedPosition
        // 更新选中位置为当前点击项
        selectedPosition = position
        // 刷新之前选中的Item(如果存在)
        if (previousSelectedPos != -1) {
            notifyItemChanged(previousSelectedPos)
        }
        // 刷新当前点击的Item
        notifyItemChanged(position)
        // 保留原有外部回调
        onItemClick?.invoke(itemDate)
    }
}

步骤3:(可选)外部获取选中数据

如果需要在Activity/Fragment中拿到当前选中的Item数据,可以在Adapter中添加方法:

fun getSelectedItem(): ResponseGetDate? {
    return if (selectedPosition != -1) yourDataList[selectedPosition] else null
}

完成以上修改后,点击任意Item时,该Item会切换为选中状态,之前选中的Item会自动取消选中,UI同步更新。


内容的提问来源于stack exchange,提问作者hassan bazai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 11:20:28