Как реализовать clicklistener в элементе customadpter в kotlin?

Я хочу реализовать onClickListener в элементе recyclerview. Вот мой код CustomAdapter.kt .

package com.png.kotlinsample /** * Created by admin on 13-08-2017. */ import android.support.v7.widget.RecyclerView import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.TextView /** * Created by prashant on 6/19/2017. */ class CustomAdapter(val userList: ArrayList<User>, val listener: (User) -> Unit) : RecyclerView.Adapter<CustomAdapter.ViewHolder>() { //this method is returning the view for each item in the list class MyAdapter(val userList: ArrayList<User>) override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CustomAdapter.ViewHolder { val v = LayoutInflater.from(parent.context).inflate(R.layout.row_layout, parent, false) return ViewHolder(v) } //this method is binding the data on the list override fun onBindViewHolder(holder: CustomAdapter.ViewHolder, position: Int) { holder.bindItems(userList[position],listener) } //this method is giving the size of the list override fun getItemCount(): Int { return userList.size } //the class is hodling the list view class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { fun bindItems(user: User, listener: (User) -> Unit) = with(itemView) { val textViewName = itemView.findViewById(R.id.textViewUsername) as TextView val textViewAddress = itemView.findViewById(R.id.textViewAddress) as TextView textViewName.text = user.name textViewAddress.text = user.address setOnClickListener { listener(user) } } } } 

Я хочу, чтобы обратная связь с прослушивателем кликов из моей активности.

Хорошо, давайте сделаем это за 3 шага

1- Вы определяете интерфейс с методом onClick как ваши обратные вызовы, подобные этому

  interface UserClickCallbacks { fun onUserClick(user: User) } 

2- Второй в вашем адаптере вы добавляете слушателя кликов в держатель вида с вызовом метода интерфейса, подобного этому

РЕДАКТИРОВАТЬ

 class CustomAdapter(val userList: ArrayList<User>, private val userClickCallbacks: UserClickCallbacks) : RecyclerView.Adapter<CustomAdapter.ViewHolder>() { //this method is returning the view for each item in the list class MyAdapter(val userList: ArrayList<User>) override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CustomAdapter.ViewHolder { val v = LayoutInflater.from(parent.context).inflate(R.layout.row_layout, parent, false) return ViewHolder(v) } //this method is binding the data on the list override fun onBindViewHolder(holder: CustomAdapter.ViewHolder, position: Int) { holder.textViewName.text = user.name holder.textViewAddress.text = user.address } //this method is giving the size of the list override fun getItemCount(): Int { return userList.size } //the class is hodling the list view class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), View.OnClickListener { init { view.setOnClickListener(this) } val textViewName = itemView.findViewById(R.id.textViewUsername) val textViewAddress = itemView.findViewById(R.id.textViewAddress) override fun onClick(p0: View?) { userClickCallbacks.onUserClick(userList[adapterPosition]) } } } 

3- В вашей деятельности вы реализуете интерфейс UserClickCallbacks и переопределяете метод onUserClick() подобный этому

 class UserActivity : AppCompatActivity(), UserClickCallbacks { // your activity code override fun onUserClick(user: User) { // but the user click event logic here // This triggered when user in tha adapter clicked } }