前言
在邏輯代碼中改變介面很不好,慎用。
正文
先看代碼,這是寫在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,如果是沒選中的,透明
网友评论