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
}
})
我在我的应用程序和界面中使用多个 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
}
})