如何在我的Kotlin RecylerView适配器中传递接口并在Kotlin Activity中获得回调

Pra*_*ale 4 kotlin

这是我的KotlinRecyclerView适配器类

  class ListAdapter(var c: Context, var lists: ArrayList<Employee>,
     itemClickListener: Any?): RecyclerView.Adapter<RecyclerView.ViewHolder>() {
      override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): RecyclerView.ViewHolder {
       var v = LayoutInflater.from(c).inflate(R.layout.list_layout, parent, false)
        return Item(v)
      }
      override fun onBindViewHolder(holder: RecyclerView.ViewHolder?, position: Int) {
       (holder as Item).bindData(lists.get(position))
      }
      override fun getItemCount(): Int {
        return  lists.size;
        }
     class Item(itemView: View) : RecyclerView.ViewHolder(itemView) {
      fun bindData(_list: Employee)
      {
       itemView.textViewfirstname.text = _list.firstName
       itemView.textViewlastname.text = _list.lastName
      }
     }
    }
Run Code Online (Sandbox Code Playgroud)

这是我的Kotlin活动代码

list.adapter = ListAdapter(this, getLists())
Run Code Online (Sandbox Code Playgroud)

Aks*_*ani 7

你可以通过界面

list.adapter = ListAdapter(this, getLists(), object : ItemClickInterfaces {
                    override fun itemClick() {
                        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                    }
                })
Run Code Online (Sandbox Code Playgroud)

在适配器端,您可以像这样使用:

 class ListAdapter(var c: Context, var lists: ArrayList<Employee>,  var itemClickListener: ItemClickInterfaces) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {


lateinit var itemClickListener: ItemClickInterfaces

override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): RecyclerView.ViewHolder {
    var v = LayoutInflater.from(c).inflate(R.layout.list_layout, parent, false)
    this.itemClickListener = itemClickListener
    return Item(v)
}

override fun onBindViewHolder(holder: RecyclerView.ViewHolder?, position: Int) {
    (holder as Item).bindData(lists[position])

    if(somcondition){
        itemClickListener.itemClick()
    }
}

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

internal class Item(itemView: View) : RecyclerView.ViewHolder(itemView) {
    fun bindData(_list: Employee) {
        itemView.textViewfirstname.text = _list.firstName
        itemView.textViewlastname.text = _list.lastName
    }
}
interface ItemClickListener {
fun itemClick()
}
    }
Run Code Online (Sandbox Code Playgroud)

}