kotlin - 如何在 Kotlin RecylerView 适配器中传递接口(interface)并在 Kotlin Activity 中获取回调

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

这是我的 Kotlin 事件代码

list.adapter = ListAdapter(this, getLists())

最佳答案

您可以传递类似的接口(interface)

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

在适配器端你可以这样使用:

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

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

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

关于kotlin - 如何在 Kotlin RecylerView 适配器中传递接口(interface)并在 Kotlin Activity 中获取回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46703418/

相关文章:

kotlin - 如何类型安全将 Either 的集合减少到仅 Right

arrays - Kotlin 中的二维数组

kotlin - 如何在 Kotlin 中将 Int 转换为 Char

java - CryptoJS 加密 HMACSha256 与 Java 不同

android - Room 上的嵌套嵌入列表

android - 使用 Kotlin 扩展函数将 RxJava Observables 转换为实时数据

android - 如何将 JWT token 从一个 Activity 传递到另一个 Activity ?

Android NestedScrollView.smoothScrollBy() 滚动太远

kotlin - Kotlins的真正意图还在于示波器功能

swift - 为 Decodable 类中的属性设置更改名称 | swift