Я пытаюсь создать класс 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
}
Другой класс.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
}
}