如何在Android中的Kotlin的RecycleView中实现onItemClick和onLongItemClick

时间:2018-12-25 07:51:20

标签: android kotlin

  • 我已经使用Kotlin来实现点击侦听器
  • 如何正确使用它,当前未检测到点击,我无法使用以下代码检测到点击。

  class AdptEvents (val items: MutableList<TestModel>, val context: Context) : RecyclerView.Adapter<ViewHolder>() {

        override fun onCreateViewHolder(parent: ViewGroup, p1: Int): ViewHolder {
            return ViewHolder(LayoutInflater.from(context).inflate(R.layout.row_event, parent, false))
        }

        override fun getItemCount(): Int {
            return items.size
        }

        override fun onBindViewHolder(holder: ViewHolder, position: Int) {
            holder?.tvAnimalType?.text = items.get(position).getName()

            holder?.rootView.setOnClickListener{
                clickEventRow(items,position)
                true
            }
            holder?.rootView.setOnLongClickListener {
                clickEventRow(items,position)
                true
            }
        }

        private fun clickEventRow( items: MutableList<TestModel>, position: Int ) {
            Toast.makeText(context,items[position].getName(),Toast.LENGTH_LONG).show()
        }

    }

    class ViewHolder (view: View) : RecyclerView.ViewHolder(view) {
        // Holds the TextView that will add each animal to
        val tvAnimalType = view.txtTitle!!
        val rootView = view.eventListRootId!!
    }

3 个答案:

答案 0 :(得分:1)

您不需要其他任何东西

  override fun onBindViewHolder(holder: ViewHolder, position: Int) {
            holder?.tvAnimalType?.text = items.get(position).getName()

            holder?.rootView.setOnClickListener{
              // code here
            }
            holder?.rootView.setOnLongClickListener {
               //code here
            }
        }

答案 1 :(得分:0)

更改视图持有者。另外,如果您需要获取索引,请使用adapterPosition变量。

inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
    // Holds the TextView that will add each animal to
    val tvAnimalType = itemView.txtTitle!!
    val rootView = itemView.eventListRootId!!

    init {
        itemView.setOnClickListener {
            Toast.makeText(context, "OnClick", Toast.LENGTH_LONG).show()
        }
        // OnLongClick and etc.
    }
}

答案 2 :(得分:0)

如果您需要处理根视图单击事件,请直接应用它

class ViewHolder (view: View) : RecyclerView.ViewHolder(view) {
    // Holds the TextView that will add each animal to
    val tvAnimalType = view.txtTitle!!

    view.setOnClickListener {
        Toast.makeText(view.context, "OnClick", Toast.LENGTH_LONG).show()
    }
    view.setOnLongClickListener {
        Toast.makeText(view.context, "OnLongClick", Toast.LENGTH_LONG).show()
        true
    }
}