Kotlin RecyclerView選中高亮

前言

在邏輯代碼中改變介面很不好,慎用。

正文

先看代碼,這是寫在Fragment內部的一個RecyclerView的完整適配器代碼。

其中自定義的對象和XML有(不重要):

  • 數據對象 Device
  • item的佈局 R.layout.supervisor_list_item_device
var deviceSelectedPosition = 0 //在fragment內的一個狀態,用來保存選中的item位置
private inner class DeviceAdapter(private val deviceList: List) :
        RecyclerView.Adapter() {

    inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        //核心代碼 begin
        fun bind(item: Device) = with(itemView) {
            setOnClickListener {
                deviceSelectedPosition = adapterPosition
                //...
                notifyDataSetChanged()
            }
            if (deviceSelectedPosition == adapterPosition) setBackgroundColor(Color.argb(0x20, 0, 0, 0))
            else setBackgroundColor(Color.TRANSPARENT)
            //...
        }
        //核心代碼 end
    }

    override fun getItemCount() = deviceList.size

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.supervisor_list_item_device, parent, false))

    override fun onBindViewHolder(holder: ViewHolder, position: Int) = holder.bind(deviceList[position])
}

點擊監聽的邏輯:1,保存選中位置;2,更新
更新邏輯:1,如果是選中的,變色;2,如果是沒選中的,透明

你可能感兴趣的:(Kotlin RecyclerView選中高亮)