我正在尝试创建一个BaseRecyclerViewAdapter<T>:RecyclerView.Adapter<T>
类,以便为使用泛型的类提供默认/通用功能。由于视图模型的差异,onBindViewHolder
和onCreateViewHolder
方法在基类上引发NotImplementedError。现在,当我想在继承BaseRecyclerViewAdapter<T>
的类中实现方法时,遇到以下错误:
Modifier 'override' is not applicable to 'top level function'
如何在不遇到此错误的情况下安全地覆盖它们?
Base.kt:
package com.example
abstract class BaseAdapter<T, THolder: RecyclerView.ViewHolder> (
private val mValues: List<T>,
private val mListener: OnFragmentInteractionListener<T>?
) : RecyclerView.Adapter<THolder>() {
private val mOnClickListener: View.OnClickListener
init {
mOnClickListener = View.OnClickListener { v ->
val item = v.tag as T
mListener?.onListFragmentInteraction(item)
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): THolder {
throw NotImplementedError()
}
override fun onBindViewHolder(holder: THolder, position: Int) {
throw NotImplementedError()
}
override fun getItemCount(): Int = mValues.size
//And some other fancy methods
}
其他class.kt:
package com.example
class TheAdapter(
private val mValues: List<Item>,
private val mListener: OnFragmentInteractionListener<Item>?
) : BaseAdapter<Item, ViewHolder>(mValues, mListener)
//Error here
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
}
//Error here
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
}
inner class ViewHolder(val mView: View) : RecyclerView.ViewHolder(mView) {
//ViewHolder properties and methods
}
}
答案 0 :(得分:0)
您已使类名ViewHolder重载。您的类定义中的ViewHolder是RecyclerView.ViewHolder。函数签名中的一个是您的内部类。您需要在类定义中指定内部变量:BaseAdapter<String, TheAdapter.ViewHolder>
,以避免造成混淆。或者更好的是,为内部类使用不同的类名称。