[英]About RecyclerView.ViewHolder and RecyclerView.Adapter
[英]How can I create a wrapper for the RecyclerView Adapter that will accept any Adapter that implements RecyclerView.Adapter<RecyclerView.ViewHolder>
我知道标题有点奇怪,对不起。 这是一个奇怪的问题,我什至不确定我能否正确解释它,这是我的尝试:
基本上我想为任何扩展RecyclerView.Adapter<RecyclerView.ViewHolder>
的适配器实现一个包装器,如果需要,包装器最终将能够插入行,它会根据需要修改诸如getItemCount()
之类的东西,但我还差得远那部分呢。
这是我的类定义:
class MyRecyclerAdapterWrapper(activity: Activity,val originalAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder>) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
我将要包装的原始适配器传递给它。
如果我有这样的类定义,然后我尝试像这样创建MyRecyclerAdapterWrapper
的实例:
val wrapper = MyRecyclerAdapterWrapper(activity, myOriginalAdapter)
其中myOriginalAdapter
是以下实例:
class MyOriginalAdapter() : RecyclerView.Adapter<MyOriginalAdapter.MyViewHolder>() {
然后我收到一条错误消息,说它期待RecyclerView.Adapter<RecyclerView.ViewHolder>
但得到了MyOriginalAdapter
。
所以我在类定义上尝试了out
关键字,如下所示:
class MyRecyclerAdapterWrapper(activity: Activity,val originalAdapter: RecyclerView.Adapter<out RecyclerView.ViewHolder>) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
这允许我的构造函数调用MyRecyclerAdapterWrapper(activity, myOriginalAdapter)
来停止抱怨,但是我的MyRecyclerAdapterWrapper
类无法实现一些RecyclerView.Adapter<RecyclerView.ViewHolder>
覆盖,因为originalAdapter
期望Nothing
而不是RecyclerView.ViewHolder
。
例如在MyRecyclerAdapterWrapper
我有这段代码:
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
originalAdapter.onBindViewHolder(holder,position)
}
这里的错误是Type mismatch
Required: Nothing
Found: RecyclerView.ViewHolder
。
那么处理这个问题的正确方法是什么?
编辑:只是想清楚其他适配器也将使用此包装器,因此包装器必须是通用的。
参数 require Nothing
因为你声明out
泛型参数
尝试将RecyclerView.ViewHolder
更改为MyOriginalAdapter.MyViewHolder
class MyRecyclerAdapterWrapper(activity: Activity,val originalAdapter: RecyclerView.Adapter<MyOriginalAdapter.MyViewHolder>) : RecyclerView.Adapter<MyOriginalAdapter.MyViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyOriginalAdapter.MyViewHolder {
TODO("Not yet implemented")
}
override fun onBindViewHolder(holder: MyOriginalAdapter.MyViewHolder, position: Int) {
originalAdapter.onBindViewHolder(holder, position)
}
override fun getItemCount(): Int {
TODO("Not yet implemented")
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.