Kotlin RecyclerView選中高亮

作者: uniforest | 来源:发表于2018-09-25 12:04 被阅读0次

    前言

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

    正文

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

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

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

        本文链接:https://www.haomeiwen.com/subject/jsxcgftx.html