Как отобразить заголовок RecyclerView, как в Google Play Store, без внешних библиотек — Kotlin

#android #kotlin #android-recyclerview #header

#Android #android-макет #котлин #android-recyclerview #Вид

Вопрос:

О нас

Я создаю макет приложения, которое может отображать заголовок внутри RecyclerView , который имеет тот же стиль, что и Google Play Store.

Заголовок будет иметь :

  1. TextView расположенный в левом верхнем углу, который отображает ActivityName
  2. ImageButton расположен в правом верхнем углу по центру с ActivityName, который раздувает другое действие
  3. SeachView расположенный в нижней части TextView и ImageButton
  4. Раздел тегов, который заменит содержимое / элементы RecyclerView (я также не знаю, какая терминология или лучший вид / контейнер для использования)

Проблема

Я пытаюсь узнать, как использовать getItemViewType или как вставить все (4) вида, которые я хочу, в адаптер RecyclerView. Я уже просмотрел множество руководств и статей, но, к сожалению, нет четкого руководства, в котором рассказывалось бы о «обычном» способе создания заголовка внутри RecyclerView, который не требует внешних зависимостей.

Было бы большой помощью, если бы кто-нибудь мог показать мне четкую статью / руководство / способ в Kotlin, который может решить мою проблему, в которой не используются внешние библиотеки.

Приложение

  1. Видео Youtube о том, как мой заголовок будет действовать в заголовке RecyclerView ссылка на видео

  2. Ссылка на заголовок, Эталонное изображение Google Play Store

  3. Желаемый заголовок Изображение заголовка желаемого приложения

Ответ №1:

То, что вы ищете, можно довольно легко сделать с помощью нового ConcatAdapter:

         val adapterList = mutableListOf<RecyclerView.Adapter<*>>()
                .apply {
                    add(HeaderAdapter())
                    add(TitleAdapter("Items"))
                    add(ItemsAdapter())
                    add(TitleAdapter("Crates"))
                    add(CratesAdapter()) 
                }

        adapter = ConcatAdapter(adapterList)
  

Предлагаемый альтернативный формат:

         adapter = ConcatAdapter(
                    HeaderAdapter(),
                    TitleAdapter("Items"),
                    ItemsAdapter(),
                    TitleAdapter("Crates"),
                    CratesAdapter())
  

Обратите внимание, что adapter это относится к вашей переменной RecyclerView.

Для TitleAdapter и HeaderAdapter вы просто создаете адаптер с getItemCount() = 1 и желаемым видом в его ViewHolder.

Комментарии:

1. Хотя это может дать мне представление о моей проблеме с тегами. Я думаю, что это не будет действовать так, как я ожидал.

2. Пожалуйста, посмотрите видео на YouTube, предоставленное по ссылке.

3. Я посмотрел видео перед ответом, и сейчас тоже. Я не понимаю, в чем проблема или почему это не сработает. Можете ли вы уточнить? Если вас что-то смущает, я могу прояснить это еще больше.

4. Сможет ли ConcatAdapter следить за движением прокрутки, как показано здесь, в ссылке? gif

5. меня беспокоит, возможен ли этот метод при реализации верхнего и нижнего колонтитулов для приложения. в то же время имея возможность изменять представления с помощью тега.