В чем разница между расширяет Recyclerview.Adapter против RecyclerView.Adapterв RecyclerView - PullRequest
0 голосов
/ 01 ноября 2019

Я читал онлайн о RecyclerView в Android. Как новичок, я видел, как некоторые онлайн-уроки распространяются только на RecyclerView.Adapter<Subclass_RecyclerviewAdapter.ViewHolder>, а некоторые RecylerView.Adapter. Собственно, в чем разница между ними? что лучше?

1 Ответ

1 голос
/ 01 ноября 2019

Если я сделаю это:

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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...