Kotlin 使适配器更具可重用性

Kotlin make adapter more reusable

我在我的应用程序和界面中使用多个 recyclerview 适配器来监听点击。 我到了我有 2 个片段的地步,它们仅在另一个 class 中显示完全相同的视图和完全相同的数据。但是适配器中的 clickListener 绑定到第一个 class,因此不接受第二个 class 值。

这是更有意义的代码。

class ContactsAdapter(
    var listVar: RealmResults<SchemeContacts>?,
    val autoUpdate: Boolean,
    val cellClickListener: ContactsList
) : RealmRecyclerViewAdapter<SchemeContacts, ChatsAdapter.DataHolder>(listVar, autoUpdate)...

我在下面class联系人列表中使用它。

    layoutManager = LinearLayoutManager(activity)
    adapter = ContactsAdapter(contacts, true, this@ContactsList)

当我想重新使用它时,我的 ChatsClass 是这样的:

   layoutManager = LinearLayoutManager(activity)
    adapter = ContactsAdapter(contacts, true, this@ChatsClass)

我得到一个错误,因为它与给定的注释不匹配,这是正确的。 我怎样才能确保它接受两个 classes?

我认为我们可以使用接口轻松解决这个问题。我还没有测试代码,但它应该可以工作。

首先定义一个接口

interface ContactItemClickListener {
   fun onClick(contact: Contact)
}

在你的适配器中使用这个接口

class ContactsAdapter(
    var listVar: RealmResults<SchemeContacts>?,
    val autoUpdate: Boolean,
    val cellClickListener: ContactItemClickListener
) : RealmRecyclerViewAdapter<SchemeContacts, ChatsAdapter.DataHolder>(listVar, autoUpdate)

然后在您的联系人列表中class像这样使用它

    layoutManager = LinearLayoutManager(activity)
    adapter = ContactsAdapter(contacts, true, object: ContactItemClickListener {
        override fun onClick(contact: Contact) {
           // handle your click here
        }
    })

并且在您的聊天中 class 像这样使用它

   layoutManager = LinearLayoutManager(activity)
    adapter = ContactsAdapter(contacts, true, object: ContactItemClickListener {
        override fun onClick(contact: Contact) {
           // handle your click here
        }
   })