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
相关产品推荐
相关产品推荐

