如何在我的Kotlin RecylerView适配器中传递接口并在Kotlin Activity中获得回调
这是我的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())
你可以通过类似的界面
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 c: Context, var lists: ArrayList<Employee>, 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 } }
}