如何使用 kotlin 显示在 recyclerview 中选择的单个项目

2024-04-07

我们如何标记单个项目被选中Recyclerview使用科特林。当我选择一个项目并单击其他项目时,应取消选择之前选择的项目。这是我在 kotlin 中的适配器类:..

 class ListAdapter(var context: Context, var list: ArrayList<ListModel>) : RecyclerView.Adapter<ListAdapter.MyViewHolder>() {

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

    override fun getItemCount(): Int {
        return list.size

    }

    override fun onBindViewHolder(holder: MyViewHolder?, position: Int) {
        holder?.bindItems(list[position])
    }

    class MyViewHolder(view: View) : RecyclerView.ViewHolder(view){

        fun bindItems(items: ListModel) {
            itemView.txt_que.text = items.que
            itemView.txt_ans.text = items.ans
            itemView.txt_sr_no.text = items.srNo
        }
}`

Here dataItem是模型类,请多取一个布尔变量isSelected在模型类中(默认值为 false),选择项目时为 true,然后在选定位置上设置该变量为 true, 以下是示例:

class AllModuleListAdapter(
var context: Context?,
private var moduleList: ArrayList<DataItem?>?,
private var mCallback: DeviceClickListener
) :
RecyclerView.Adapter<AllModuleListAdapter.MyViewHolder>() {

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

override fun getItemCount(): Int {
    return moduleList?.size ?: 0
}

override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
    holder.bind(moduleList?.get(position))

    if (moduleList?.get(position) is DataItem) {
        val dataItem = moduleList?.get(position) as DataItem
        if (dataItem.isSelected) {
            context?.let { ContextCompat.getColor(it, R.color.colorOrange) }
                ?.let { holder.itemView.setBackgroundColor(it) }

        } else {
            context?.let { ContextCompat.getColor(it, R.color.white) }
                ?.let { holder.itemView.setBackgroundColor(it) }

        }
    }

}

inner class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
    init {
        itemView.constraint_main.setOnClickListener {
            val list = moduleList as List<DataItem>
            for (item in list.indices) {
                list[item].isSelected = false
            }
            list[adapterPosition].isSelected = true

            mCallback.onDeviceClick(adapterPosition)
            notifyDataSetChanged()

            context?.let { it1 -> ContextCompat.getColor(it1, R.color.colorOrange) }?.let { it2 ->
                itemView.constraint_main?.setBackgroundColor(it2)
            }

        }

    }

    fun bind(module: DataItem?) {
        itemView.txtModuleName?.text = module?.id.toString()
        itemView.txtSignal?.text = module?.room
    }

 }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 kotlin 显示在 recyclerview 中选择的单个项目 的相关文章

随机推荐