kotlin使适配器更加可重用

gmxoilav  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(434)

我在我的应用程序和界面中使用多个recyclerview适配器来监听onclick。现在我有两个片段,它们只在另一个类中显示完全相同的视图和数据。但是适配器中的clicklistener绑定到第一个类,因此不接受第二个类值。
这是更合理的代码。

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

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

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

当我想重新使用它时,我的聊天室就像这样:

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

我得到一个错误,因为它与给定的注解不匹配,这是正确的。如何确保它同时接受这两个类?

9w11ddsr

9w11ddsr1#

我认为我们可以很容易地解决这个使用接口。我还没有测试代码,但它应该可以工作。
首先定义一个接口

interface ContactItemClickListener {
   fun onClick(contact: Contact)
}

在适配器中使用此接口

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

然后在你的联系人列表类中这样使用它

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

在你的聊天课上用这个

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

相关问题