I\'m trying to create an abstract class with generic parameter which will have subclasses which should call methods without having to specify type parameters
Thanks to Fabian Zeindly I wrote a variant for several extended classes. In this case all of them should be declared in a title of an abstract class.
abstract class AbstractAdapter : RecyclerView.Adapter() {
var list: List = emptyList()
override fun getItemCount(): Int = list.size
open fun setItems(list: List) {
this.list = list.toMutableList()
}
open class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
open class Item
}
Then extend the class with new inner classes (ViewHolder, Item).
class NewAdapter(private var listener: View.OnClickListener?) : AbstractAdapter() {
private var originalItems: List- = emptyList()
override fun setItems(list: List
- ) {
super.setItems(list)
this.originalItems = list.toMutableList()
this.list = list.toMutableList()
}
override fun onCreateViewHolder(viewGroup: ViewGroup, i: Int): ViewHolder {
val view = LayoutInflater.from(viewGroup.context)
.inflate(R.layout.layout, viewGroup, false)
return ViewHolder(view)
}
override fun onBindViewHolder(viewHolder: ViewHolder, i: Int) {
val item = list[i]
viewHolder.textView.text = item.text
viewHolder.textView.tag = item.id
}
class ViewHolder(itemView: View) : AbstractAdapter.ViewHolder(itemView) {
val textView: TextView = itemView.name
}
class Item(val id: Int, val text: String) : AbstractAdapter.Item()
}