Если я сделаю это:
class SimpleAdapter : RecyclerView.Adapter() { ... }
, тогда Android Studio скажет: «Для класса Adapther<VH: RecyclerView.ViewHolder!>
ожидается один аргумент типа». В источнике RecyclerView
вы можете увидеть:
public class RecyclerView extends ViewGroup implements ScrollingView,
NestedScrollingChild2, NestedScrollingChild3 {
...
public abstract static class Adapter<VH extends ViewHolder> { ... }
...
}
Это означает, что вы должны предоставить тип конструктору Adapter
(аналогично тому, как вы этого не делаетеопределите List
, но, например, List<String>
.
Здесь есть кое-что, на что следует обратить внимание. Вы можете указать RecyclerView.ViewHolder
в качестве типа или расширить этот класс и использовать свой пользовательский ViewHolder
. Это позволяет вам определять пользовательские методы для ViewHolder
, например:
inner class SimpleViewHolder(private val view: View) : RecyclerView.ViewHolder(view) {
fun bind(text: String) {
// Bind to the view
}
}
EDIT: важно то, что вы получаете тип, который вы используете в конструкторе в методах адаптера, например: override fun onBindViewHolder(holder: SimpleViewHolder, position: Int) { ... }
, где вы можете затем использовать свои методы из пользовательского держателя представления.
И вам понадобится собственный VH, поскольку RecyclerView.ViewHolder равен abstract .