Android 类型与Kotlin泛型适配器不匹配
我正在尝试创建一个基本适配器类,它可以被所有其他RecyclerView适配器扩展,因为它们彼此没有太大的差异 这是我的Android 类型与Kotlin泛型适配器不匹配,android,kotlin,generics,android-recyclerview,adapter,Android,Kotlin,Generics,Android Recyclerview,Adapter,我正在尝试创建一个基本适配器类,它可以被所有其他RecyclerView适配器扩展,因为它们彼此没有太大的差异 这是我的BaseAdapter类: private const val IS_EMPTY = 0 private const val IS_NOT_EMPTY = 1 abstract class BaseAdapter<T>( @LayoutRes open val layoutId: Int, private val dataList: ArrayLi
BaseAdapter
类:
private const val IS_EMPTY = 0
private const val IS_NOT_EMPTY = 1
abstract class BaseAdapter<T>(
@LayoutRes open val layoutId: Int,
private val dataList: ArrayList<T>?
) : RecyclerView.Adapter<BaseViewHolder<Any>>() {
abstract fun setViewHolder(parent: ViewGroup): BaseViewHolder<Any>
abstract fun bind(containerView: View, item: T)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder<Any> {
return setViewHolder(parent)
}
override fun onBindViewHolder(holder: BaseViewHolder<Any>, position: Int) {
bind(holder.containerView, dataList!![position])
}
override fun getItemCount(): Int = dataList!!.size
override fun getItemViewType(position: Int): Int = if (dataList!!.size == 0) IS_EMPTY else IS_NOT_EMPTY
}
abstract class BaseViewHolder<in T: Any>(override val containerView: View) : RecyclerView.ViewHolder(containerView),
LayoutContainer
我试图在其中实现它的类(LessonsRecycleServiceAdapter
)中的一个片段:
override fun setViewHolder(parent: ViewGroup): BaseViewHolder<Any> {
val view = LayoutInflater.from(parent.context).inflate(layoutId, parent, false)
return LessonsViewHolder(view)
//Type mismatch: Required: BaseViewHolder<Any> Found: LessonsRecyclerViewAdapter.LessonsViewHolder
}
当
LessonsViewHolder
扩展BaseViewHolder
?这是因为您混合了类型T
和Any
,请尝试以下操作:BaseViewHolder
abstract class BaseViewHolder<T>(override val containerView: View) :
RecyclerView.ViewHolder(containerView),
LayoutContainer
抽象类BaseViewHolder(覆盖val containerView:View):
RecyclerView.ViewHolder(容器视图),
布局容器
BaseViewAdapter
abstract class BaseAdapter<T>(
@LayoutRes open val layoutId: Int,
private val dataList: ArrayList<T>?
) : RecyclerView.Adapter<BaseViewHolder<T>>() {
abstract fun setViewHolder(parent: ViewGroup): BaseViewHolder<T>
abstract fun bind(containerView: View, item: T)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder<T> {
return setViewHolder(parent)
}
override fun onBindViewHolder(holder: BaseViewHolder<T>, position: Int) {
bind(holder.containerView, dataList!![position])
}
override fun getItemCount(): Int = dataList!!.size
override fun getItemViewType(position: Int): Int =
if (dataList!!.size == 0) IS_EMPTY else IS_NOT_EMPTY
}
抽象类BaseAdapter(
@LayoutRes open val layoutId:Int,
私有val数据列表:ArrayList?
):RecyclerView.Adapter(){
抽象有趣的setViewHolder(父:ViewGroup):BaseViewHolder
抽象趣味绑定(containerView:View,item:T)
重写CreateViewHolder(父级:ViewGroup,viewType:Int):BaseViewHolder{
返回setViewHolder(父级)
}
覆盖BindViewHolder(holder:BaseViewHolder,位置:Int){
绑定(holder.containerView,dataList!![position])
}
重写fun getItemCount():Int=dataList!!.size
覆盖getItemViewType(位置:Int):Int=
如果(dataList!!.size==0)为空,则其他为非空
}
abstract class BaseAdapter<T>(
@LayoutRes open val layoutId: Int,
private val dataList: ArrayList<T>?
) : RecyclerView.Adapter<BaseViewHolder<T>>() {
abstract fun setViewHolder(parent: ViewGroup): BaseViewHolder<T>
abstract fun bind(containerView: View, item: T)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder<T> {
return setViewHolder(parent)
}
override fun onBindViewHolder(holder: BaseViewHolder<T>, position: Int) {
bind(holder.containerView, dataList!![position])
}
override fun getItemCount(): Int = dataList!!.size
override fun getItemViewType(position: Int): Int =
if (dataList!!.size == 0) IS_EMPTY else IS_NOT_EMPTY
}