如何在kotlin的customadpter项目上实现clicklistener?

我想在recyclerview项目上实现onClickListener。 这是我的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) } } } } 

我想从我的活动点击侦听器回调。

好吧,让我们分三步来做

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 } }