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

Android Kotlin实现RecyclerView单选按钮背景切换功能求助

解决方案

要实现RecyclerView的单选功能,你需要统一管理选中状态,而非让每个Item各自维护独立状态。以下是修改后的完整代码及关键改动说明:

修改后的完整代码

class Split_recycler_adapter(var arrayList: ArrayList<Split_recycler_model>) :
    RecyclerView.Adapter<Split_recycler_adapter.Viewholder>() {

    // 全局维护选中的位置,初始-1表示无选中项,若默认选中第一个可设为0
    private var selectedPosition = -1

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Viewholder {
        val v = LayoutInflater.from(parent.context).inflate(R.layout.changesplit_recycler_item, parent, false)
        return Viewholder(v)
    }

    override fun onBindViewHolder(holder: Viewholder, position: Int) {
        val split_modal = arrayList[position]
        holder.split_text.text = split_modal.getText()

        // 根据全局选中状态设置当前Item的样式
        if (position == selectedPosition) {
            holder.split_text.setBackgroundResource(R.drawable.green_button_gradient)
            holder.split_text.setTextColor(Color.parseColor("#454546"))
        } else {
            holder.split_text.setBackgroundResource(R.drawable.dropdown_gradient)
            holder.split_text.setTextColor(Color.parseColor("#A4A4A4"))
        }

        holder.split_text.setOnClickListener {
            // 可选:点击已选中项时取消选中
            if (selectedPosition == position) {
                selectedPosition = -1
            } else {
                selectedPosition = position
            }
            // 刷新列表,让所有Item同步更新样式
            notifyDataSetChanged()
        }
    }

    override fun getItemCount(): Int {
        return arrayList.size
    }

    class Viewholder(Itemview: View) : RecyclerView.ViewHolder(Itemview) {
        val split_text: TextView = Itemview.findViewById(R.id.split_text)
    }
}

关键改动说明

  • 全局选中状态管理:新增selectedPosition变量统一记录当前选中的Item位置,避免每个Item独立维护状态导致的不同步问题。
  • 绑定阶段动态设置样式:在onBindViewHolder中根据selectedPosition判断当前Item是否选中,直接设置对应样式,确保每次Item重新绑定(如滚动复用)时状态正确。
  • 点击事件更新状态并刷新:点击Item时更新selectedPosition,调用notifyDataSetChanged()触发列表刷新,让所有Item同步更新样式。
  • 可选取消选中逻辑:如果需要支持点击已选中项取消选中,保留if (selectedPosition == position)的判断逻辑,否则直接设置selectedPosition = position即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:10:31