【问题标题】:How to pass Interface in my Kotlin RecylerView adapter and getting callback in Kotlin Activity如何在我的 Kotlin RecyclerView 适配器中传递接口并在 Kotlin Activity 中获取回调
【发布时间】:2017-10-12 07:05:46
【问题描述】:

这是我的 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())

【问题讨论】:

    标签: kotlin


    【解决方案1】:

    你可以像这样传递接口

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

    【讨论】:

    • @Prashant Andhale 如果此解决方案适合您,那么如果您接受此答案,那就太好了。
    • @Prashant Andhale,此答案会及时回答您的问题,您应该将其标记为已接受。
    【解决方案2】:

    你可以这样做

    list.adapter = ListAdapter(this@YourActivity as YourInterfaceName, getLists())
    

    这个活动应该扩展接口并实现方法

    【讨论】:

      猜你喜欢
      • 2021-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-01
      • 1970-01-01
      • 2020-07-08
      • 2022-01-13
      相关资源
      最近更新 更多