Kotlin Android Вопрос по работе адаптера в RecyclerView

В адаптере RecyclerView есть метод onCreateViewHolder(parent: ViewGroup, viewType: Int) Что за параметр viewType Есть метод getItemViewType (int position) что принимает и возвращает этот метот.

Изначально стоит задача: выводить разные представления в RecyclerView.


Ответы (2 шт):

Автор решения: apptrash

Вы можете иметь несколько "типов" элементов в RecyclerView. Метод getItemViewType (int position) должен в зависимости от позиции элемента возвращать "тип" - число, которое вы сами присвоите. В onCreateViewHolder(parent: ViewGroup, viewType: Int) как раз и попадет тип вашего элемента. Например, вы хотите, чтобы в списке были обычные элементы и заголовки, тогда getItemViewType может возвращать 0 для обычных элементов и 1 для заголовков. Само значение viewType не так важно, главное, чтобы их можно было отличать друг от друга.

→ Ссылка
Автор решения: Yulya Ulyanova

В общем я наконец то разобралась. Напишу русским языком, для тех кто так же будет искать ответ.

Адаптер RecyclerView будет вызывать метод getItemViewType (int position) каждый раз перед тем как вызывать метод onCreateViewHolder(parent: ViewGroup, viewType: Int). В метод getItemViewType он будет пихать номер позиции строки которую планирует обрабатывать. А то что метод вернёт, адаптер будет пихать уже в onCreateViewHolder(parent: ViewGroup, viewType: Int)

viewType: Int - это как раз то что возвращает метод getItemViewType и то что отправляется в метод onCreateViewHolder

Для того что бы метод getItemViewType возвращал разные числа в зависимости от ситуации вам нужно его переопределить Именно слов переопределить метод мне не хватало для того, что бы понять как эта схема работает, т.к. я думала что метод нужно вызывать, но метод вызывать не нужно. Это адаптер будет его вызывать, что бы результат отправить в onCreateViewHolder.

Таким образом в методе getItemViewType вы описываете какие числа вы будет возвращать метод при определённых значениях position (номера строки в списке). Эти значения далее вы обрабатываете в onCreateViewHolder и выбираете при каких значениях viewType цифрах используете тот или иной вид представления. Если к примеру viewType = 123, то используется представления две строки без кнопки, а если 567, то представление три строки с кнопкой.

→ Ссылка