[英]How can I create a wrapper for the RecyclerView Adapter that will accept any Adapter that implements RecyclerView.Adapter<RecyclerView.ViewHolder>
I know the title is a bit weird, sorry.我知道标题有点奇怪,对不起。 This is a weird one that I'm not even sure I can explain it correctly, here is my attempt:这是一个奇怪的问题,我什至不确定我能否正确解释它,这是我的尝试:
Basically I want to implement a wrapper for any adapters that extend RecyclerView.Adapter<RecyclerView.ViewHolder>
, the wrapper eventually will be able to insert rows if needed and it will modify things like getItemCount()
as necessary, but I'm nowhere near that part yet.基本上我想为任何扩展RecyclerView.Adapter<RecyclerView.ViewHolder>
的适配器实现一个包装器,如果需要,包装器最终将能够插入行,它会根据需要修改诸如getItemCount()
之类的东西,但我还差得远那部分呢。
This is my class definition:这是我的类定义:
class MyRecyclerAdapterWrapper(activity: Activity,val originalAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder>) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
I pass to it the original adapter which I want to wrap.我将要包装的原始适配器传递给它。
If I have the class definition like that, and then I try to create an instance of MyRecyclerAdapterWrapper
like this:如果我有这样的类定义,然后我尝试像这样创建MyRecyclerAdapterWrapper
的实例:
val wrapper = MyRecyclerAdapterWrapper(activity, myOriginalAdapter)
Where myOriginalAdapter
is an instance of:其中myOriginalAdapter
是以下实例:
class MyOriginalAdapter() : RecyclerView.Adapter<MyOriginalAdapter.MyViewHolder>() {
I then get an error saying that it is expecting RecyclerView.Adapter<RecyclerView.ViewHolder>
but instead got MyOriginalAdapter
.然后我收到一条错误消息,说它期待RecyclerView.Adapter<RecyclerView.ViewHolder>
但得到了MyOriginalAdapter
。
So then I tried the out
keyword on the class definition like this:所以我在类定义上尝试了out
关键字,如下所示:
class MyRecyclerAdapterWrapper(activity: Activity,val originalAdapter: RecyclerView.Adapter<out RecyclerView.ViewHolder>) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
And that allows my constructor call MyRecyclerAdapterWrapper(activity, myOriginalAdapter)
to stop complaining, however then my MyRecyclerAdapterWrapper
class fails at implementing some of the RecyclerView.Adapter<RecyclerView.ViewHolder>
overrides because originalAdapter
expects Nothing
instead of RecyclerView.ViewHolder
.这允许我的构造函数调用MyRecyclerAdapterWrapper(activity, myOriginalAdapter)
来停止抱怨,但是我的MyRecyclerAdapterWrapper
类无法实现一些RecyclerView.Adapter<RecyclerView.ViewHolder>
覆盖,因为originalAdapter
期望Nothing
而不是RecyclerView.ViewHolder
。
For example inside MyRecyclerAdapterWrapper
I have this piece of code:例如在MyRecyclerAdapterWrapper
我有这段代码:
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
originalAdapter.onBindViewHolder(holder,position)
}
The error here is Type mismatch
Required: Nothing
Found: RecyclerView.ViewHolder
.这里的错误是Type mismatch
Required: Nothing
Found: RecyclerView.ViewHolder
。
So what is the correct way to handle this?那么处理这个问题的正确方法是什么?
Edit: just wanted to be clear that other adapters will also use this wrapper, so the wrapper must be generic.编辑:只是想清楚其他适配器也将使用此包装器,因此包装器必须是通用的。
parameter require Nothing
because you declared out
for generic parameter参数 require Nothing
因为你声明out
泛型参数
try to change RecyclerView.ViewHolder
to MyOriginalAdapter.MyViewHolder
尝试将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.