如何使用kotlin显示在recyclerview中选择的单个项目 [英] How to show single item selected in recyclerview using kotlin

查看:71
本文介绍了如何使用kotlin显示在recyclerview中选择的单个项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们如何使用Kotlin在 Recyclerview 中标记单个项目.当我选择一个项目,然后单击其他项目时,则应取消选择先前选择的项目.这是我在kotlin:..

How can we mark single item is selected in Recyclerview using kotlin. When I select an item and after that click on other item then previously selected item should be dis-selected.Here is my adapter class in 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
        }
}`

推荐答案

此处 dataItem 是模型类,请在模型类中使用一个额外的布尔变量 isSelected (默认值is false) and true when select item then true this variable on selected position,下面是示例:

Here dataItem is Model Class and please take one extra Boolean variable isSelected in model class (default value is false) and true when select item then true this variable on selected position, below are example :

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
    }

 }
}

这篇关于如何使用kotlin显示在recyclerview中选择的单个项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆