我希望有通用的RecyclerView
能够重用它。在我的情况下,我有2个模型:CategoryImages
和Category
。当试图添加constructor()
时,它带来了以下错误。我知道第二个是因为它理解主构造函数和辅助构造函数是相同的。
有可能做这样的事情吗?如果有,那怎么做?如果没有,谢谢。
的数据
下面是CategoryImage
:
class CategoryImage {
@SerializedName("url")
private var url: String? = null
fun getUrl(): String? {
return url
}
}
字符串
下面是Category
:
class Category {
@SerializedName("_id")
var id: String? = null
@SerializedName("name")
var name: String? = null
@SerializedName("__v")
var v: Int? = null
@SerializedName("thumbnail")
var thumbnail: String? = null
}
型
下面是RecyclerViewAdapter
的构造函数的一部分:
class RecyclerViewAdapter(var arrayList: ArrayList<CategoryImage>?, var fragment: Int): RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>() {
constructor(arrayList: ArrayList<Category>, fragment: Int): this(arrayList, fragment)
}
型
6条答案
按热度按时间3vpjnl9f1#
我希望有通用的
RecyclerView
,以便能够重用它。这是一个很好的意图,那么为什么你还没有使你的适配器generic?
我认为你可以在this blog post中采用Arman Chatikyan概述的方法。在应用一些Kotlin魔法之后,你只需要以下代码行就可以设置你的
RecyclerView
:字符串
如果您需要处理
RecyclerView
项目的点击:型
现在
RecyclerView
的适配器是通用的,您可以在setup()
方法的第一个参数中传递任何模型的列表。在本节中,我将从博客文章中复制粘贴源代码,以避免被外部源代码弃用。
型
xv8emn3q2#
假设
CategoryImage
表示带有图像的Category
。你可以用继承来表达这种关系:
字符串
另一个选项是有一个通用的接口(删除了丑陋的造型):
型
在这两种情况下,下面的工作(只是为了看看它可以编译):
型
提示:不要使用
ArrayList
,List
(listOf(...)
)或MutableList
(mutableListOf(...)
)应该足以满足您的所有需求。提示:尽量使用
val
,有助于防止出错。z31licg03#
一种“可怕”的方法是简单地让一个构造器接受一个对象的数组列表,并对这些对象执行
instanceof
。tktrz96b4#
这两个方法有相同的签名,因为类型参数不被认为是不同的类型(对于Java虚拟机,两者都只是
ArrayList
s)。x4shl7ld5#
检查此存储库https://github.com/shashank1800/RecyclerGenericAdapter
字符串
Recycler adapter item R.layout.adapter_item XML.
型
mpgws1up6#
非常重要的注意事项:我使用相同的布局为我所有的屏幕。
字符串