Как использовать Recyclerview android studio

Обновлено: 24.09.2022

В мире разработки мобильных приложений, независимо от платформы, во многих проектах обычно используются списки, отображающие данные для пользователя. Платформа Android предоставляет нам два разных типа представлений, которые можно использовать для отображения списков данных: ListView и RecyclerView.

Мой друг и член команды, Брэндон Картер, написал статью о создании производительных ListView, которую я настоятельно рекомендую прочитать, если вам нужно использовать ListView в своем проекте. Однако сегодня мы сосредоточимся на более продвинутом типе представления Android для представления списков — RecyclerView.

RecyclerView — очень мощный и гибкий инструмент, доступный разработчикам Android. Из-за этого крайне важно, чтобы мы правильно реализовали его, чтобы наш код соблюдал хороший баланс между максимально оптимизированным и кратким. Ниже приведено руководство о том, как мне нравится реализовывать шаблоны RecyclerView, Adapter и ViewHolder. В конечном счете, я планирую сделать серию руководств, состоящую из нескольких частей, которые начнутся с простого шаблона, показанного ниже, а затем перейдут к более сложному использованию этого шаблона в будущих частях.

Приготовьте свои мысли и пальцы, потому что в этих сообщениях будет много кода. Тем не менее, давайте приступим и начнем создавать потрясающие вещи RecyclerView. И, если вы еще этого не сделали, создайте базовый проект Android с пустой Activity.

Простой шаблон RecyclerView/адаптер/ViewHolder

Во-первых, нам нужна цель для конечного продукта.

  • Создайте список, содержащий некоторое количество простых текстовых элементов.
  • Эти текстовые элементы будут отображать следующий текст: «Это элемент », где itemIndex — это индекс модели представления, содержащейся в нашем списке.

Настройка проекта

Нам нужно начать настройку нашего проекта, убедившись, что зависимость RecyclerView включена в библиотеки наших проектов. В файле build.gradle уровня приложения добавьте следующую зависимость: com.android.support:recyclerview-v7:24.2.1.

Совет. Самую последнюю актуальную версию можно найти на официальной странице функций библиотеки поддержки Android.

Основные зависимости теперь должны выглядеть примерно так:

*Примечание: Лично я предпочитаю определять переменную, если она понадобится нескольким зависимостям.< /эм>

Добавление виджета RecyclerView в действие

Теперь, когда в наш проект добавлена ​​зависимость RecyclerView, давайте добавим виджет представления в нашу активность. В файл макета активности, расположенный в папке ресурсов макета, добавьте следующий код:

*Примечание. Идентификатор представления важен, так как нам потребуется ссылаться на него позже при создании экземпляра RecyclerView.

Создание макета элемента

В папке ресурсов макета создайте файл макета с именем «item_simple_itemview.xml», а затем добавьте TextView с идентификатором @+id/simple\_text.

*Примечание. Идентификатор представления чрезвычайно важен, так как нам потребуется ссылаться на него позже при настройке отображаемого текста.

Это все, что нам нужно в отношении XML-файлов, теперь самое интересное!

Создание ViewModel

Во-первых, нам нужно создать общий объект, который будет хранить наши данные. Назовем его SimpleViewModel.

*Примечание. Я специально создал этот объект данных с помощью геттера и сеттера, чтобы его содержимое, строку, нельзя было изменить напрямую. Это также настраивает нас на будущее, поскольку в следующей части этой серии будет использоваться этот класс.

Создание адаптера

Далее нам понадобится адаптер. Адаптер — это часть, которая свяжет наши данные с нашим RecyclerView и определит ViewHolder (ы), которые необходимо будет использовать для отображения этих данных. В WillowTree мы выступаем за принцип разделения ответственности и считаем, что лучше всего сделать адаптер как можно более «тупым». Никакая работа, выполняемая с данными, не должна находиться в адаптере. Вместо этого, как будет продемонстрировано в нашем проекте здесь, мы будем обрабатывать все манипуляции с данными за пределами нашего адаптера в нашем классе SimpleViewModel.

Давайте создадим класс SimpleAdapter, который расширяет RecyclerView.Adapter.

При использовании интегрированной среды разработки, такой как Android Studio, вы сразу же заметите красную волнистую линию, которая сообщает нам о наличии базового набора переопределений методов, которые необходимо добавить в адаптер, чтобы он заработал. Эти обязательные методы следующие:

  • onCreateViewHolder(предок ViewGroup, int viewType)
  • onBindViewHolder(держатель RecyclerView.ViewHolder, позиция int)
  • получитьсчетчик_элементов()

Нам нужно будет добавить еще один переопределенный метод в наш проект, getItemViewType(int).

*Совет. В Android Studio вы можете использовать сочетание клавиш CTRL + RETURN, чтобы открыть контекстное меню, которое позволит вам найти и вставить переопределенный метод.< /p>

onCreateViewHolder(ViewGroup, int)

Этот метод вызывается сразу после создания адаптера и используется для инициализации ViewHolder(ов).

Одна из интересных вещей и, на мой взгляд, одна из самых мощных функций, встроенных в RecyclerView, заключается в том, что метод getItemViewType(int position) позволяет нам возвращать фактический идентификатор макета, который инфраструктура Android сохраняет для нас в качестве ресурса макета. Javadoc для этого метода гласит:

«… В отличие от адаптеров ListView, типы не обязательно должны быть смежными. Рассмотрите возможность использования ресурсов идентификатора для уникальной идентификации типов представлений элементов».

Возврат ресурса с идентификатором макета в этом методе очень полезен, поскольку позволяет нам использовать идентификатор ресурса с LayoutInflater в методе onCreateViewHolder(), а затем возвращать ViewHolder.

onBindViewHolder(RecyclerView.ViewHolder, int)

Этот метод вызывается для каждого ViewHolder, чтобы связать его с адаптером. Здесь мы будем передавать наши данные нашему ViewHolder.

getItemCount()

Этот метод возвращает размер коллекции, содержащей элементы, которые мы хотим отобразить.

получитьItemViewType(целое число)

Этот метод возвращает целое число, представляющее тип представления. Поскольку система Android хранит статическую ссылку на каждый макет в виде целого числа в классе «R» (ресурсы), мы можем просто вернуть идентификатор ресурса макета, который будет использоваться в методе onCreateViewHolder().

Ну вот! Теперь у нас есть полностью функционирующий адаптер RecyclerView, готовый делать свое дело. Далее, SimpleViewHolder .

Создание ViewHolder

Теперь, когда мы настроили SimpleAdapter и SimpleViewModel, давайте продолжим и создадим наш SimpleViewHolder.

ViewHolder — это больше, чем простой объект, который содержит только представления элемента. Это тот самый объект, который представляет каждый элемент в нашей коллекции и будет использоваться для его отображения. Этот мощный объект — причина, по которой я решил написать этот урок! Часто я вижу много примеров, в которых используется метод адаптера onBindViewHolder() для работы с держателем представления. Как я упоминал ранее, нам нравится разделять наши задачи, и поэтому адаптер должен быть на самом деле «тупым» объектом, только соединяющим RecyclerView и его данные через держатель представления.

Итак, давайте создадим наш SimpleViewHolder и добавим метод с именем bindData(SimpleViewModel viewModel). Как и в случае с SimpleAdapter, вы заметите, что при первом создании SimpleViewHolder снова появится красная волнистая линия, информирующая вас о том, что вам нужно добавить конструктор в свой класс. Этот конструктор возьмет родительское представление макета элемента, что позволит вам настроить любые представления, которые вам понадобятся при отображении ваших данных. Для нашего проекта у нас есть только TextView, так что давайте настроим его:

Теперь, когда мы реализовали основы, нам нужно добавить дополнительный метод, который мы можем использовать для привязки наших данных к этому TextView. Идите вперед и назовите этот метод «bindData» и пусть он принимает нашу SimpleViewModel в качестве своего параметра. Наконец, в нашем методе bindData(SimpleViewModel) давайте установим текст TextView, извлекая данные из нашей SimpleViewModel с помощью метода getSimpleText(). Наш метод bindView теперь должен выглядеть примерно так:

Это наша модель SimpleViewModel! Теперь перейдем к подключению всего в Activity.

У нас почти готов проект, в котором реализованы шаблоны RecyclerView, Adapter и ViewHolder, разделяющие каждую задачу на отдельный объект. Все, что нам осталось сделать, это подключить все в основном Activity. Итак, вперед!

Подключение всего в действии

Это действие будет экраном, на котором будет отображаться наш RecyclerView и все содержащиеся в нем данные для наших пользователей. Здесь важно отметить, что в отличие от наших SimpleAdapter и SimpleViewHolder, Activity не требует каких-либо переопределенных методов. Однако для того, чтобы все это работало, нам нужно добавить переопределение одного метода — переопределение onCreate(Bundle saveInstanceState). В методе onCreate нам нужно добавить вызов метода super, а также добавить метод setContentView(int layoutResID), передающий идентификатор ресурса макета нашей Activity.

В этом руководстве мы инициализируем SimpleAdapter и RecyclerView в нашем методе onCreate(). Ранее, когда мы создавали наш SimpleAdapter, мы настроили его так, чтобы нам нужно было передавать список объектов SimpleViewModel, поэтому давайте продолжим и создадим частный вспомогательный метод, чтобы сделать это сейчас.

Все, что мы здесь делаем, — это генерируем 100 объектов SimpleViewModel, которые передаются в строке «Это элемент %d» и добавляют каждый из них в список, который затем будет возвращен вызывающей стороне.

Теперь, когда у нас есть вспомогательный метод, перейдите к методу onCreate() и создайте экземпляр нового SimpleAdapter, который передается в наш список, сгенерированный вспомогательным методом generateSimpleList().

После этого нам нужно будет создать экземпляр нашего RecyclerView, используя ресурс id, который мы создали в XML-файле макета нашей Activity:

Теперь, когда у нас есть RecyclerView, нужно сделать еще несколько вещей, чтобы заставить его работать. Одним из наиболее важных является LayoutManager. Платформа Android предоставляет несколько предопределенных менеджеров компоновки, которые мы можем использовать для определения того, как будут отображаться наши данные, — LinearLayoutManager, GridLayoutManager и StaggeredGridLayoutManager. Поскольку мы хотим отображать наши данные в виде линейного вертикального списка, мы будем использовать LinearLayoutManager. Есть несколько способов установить LayoutManager в RecyclerView — в XML или программно в коде Java. Мы продолжим и установим наш LinearLayoutManager в нашем коде Java:

*Примечание. Дополнительные сведения о RecyclerView.LayoutManager см. в официальной документации здесь.

Этот следующий шаг, задающий, имеет ли RecyclerView фиксированный размер, не обязателен, но мне нравится это делать, потому что он помогает платформе Android оптимизировать RecyclerView, заранее сообщая ему, что размер RecyclerView не будет зависит от содержимого адаптера. Вы можете прочитать больше об этом очень полезном методе в официальной документации Android. С учетом сказанного давайте продолжим и реализуем setHasFixedSize(boolean) вот так:

Наконец, нам нужно присоединить наш SimpleAdapter к RecyclerView. Мы делаем это с помощью метода setAdapter(Adapter):

Вот оно! Теперь наш полный класс Activity должен выглядеть примерно так:

Запустите свой проект в эмуляторе или на физическом устройстве, и вы увидите список элементов, каждый из которых отображает текст «Это элемент», где будет порядковый номер элемента в нашем списке. Вы должны увидеть что-то похожее на анимированный gif ниже.

Анимация/gif того, как должен выглядеть наш законченный проект.

Я с нетерпением жду встречи с вами в следующей части руководства по RecyclerView, где мы поднимем его на ступеньку выше и создадим немного более сложный проект, расширяющий то, что мы узнали здесь. Мы будем реализовывать несколько ViewHolder, интерфейс onClickListener и изменять данные элемента при нажатии на элемент, конечно, интересные вещи!

Если у вас есть какие-либо вопросы или предложения, оставьте комментарий ниже или свяжитесь с нами напрямую, и мы будем рады помочь всем, чем сможем.

Отображение элементов в виде списка или сетки — очень распространенный шаблон в мобильных приложениях. Пользователь видит набор элементов и может прокручивать их. Набор элементов может быть списком, сеткой или другим структурированным представлением данных. Такое действие изображено на следующем рисунке.

Пример просмотра списка

Пользователь взаимодействует с коллекцией элементов с помощью сенсорных событий или панели инструментов. Можно выбрать отдельные элементы. Этот выбор может обновить панель инструментов или вызвать подробный экран на основе выбора. Следующие графические наброски это.

Пример просмотра списка

1.2. Использование RecyclerView

Класс RecyclerView поддерживает отображение коллекции данных.

Это модернизированная версия классов ListView и GridView, предоставляемых платформой Android. Представление Recycler решает несколько проблем, которые есть у существующих виджетов. Он навязал стиль программирования, обеспечивающий хорошую производительность. Он также поставляется с анимацией по умолчанию для удаления и добавления элементов.

RecyclerView позволяет использовать различные менеджеры компоновки для позиционирования элементов.

Представление Recycler использует ViewHolder для хранения ссылок на представления для одной записи в представлении Recycler. Класс ViewHolder — это статический внутренний класс в вашем адаптере, который содержит ссылки на соответствующие представления. С помощью этих ссылок ваш код может избежать затратного по времени метода findViewById() для обновления виджетов новыми данными.

1.3. Адаптеры

адаптер управляет моделью данных и адаптирует ее к отдельным записям в виджете. Он расширяет класс RecyclerView.Adapter и назначается представлению ресайклера с помощью метода RecyclerView.setAdapter. Входными данными для адаптера представления ресайклера могут быть любые произвольные объекты Java. На основе этих входных данных адаптер должен вернуть общее количество элементов с помощью своего метода getItemCount().

Адаптер подготавливает макет элементов, изменяя правильный макет для отдельных элементов данных. Эта работа выполняется в методе onCreateViewHolder.Он возвращает объект типа ViewHolder для каждой визуальной записи в представлении переработчика.

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

Каждая видимая запись в представлении ресайклера заполняется адаптером правильным элементом модели данных. Как только элемент данных становится видимым, адаптер присваивает эти данные отдельным виджетам, которые он надул ранее. Эта работа выполняется в методе onBindViewHolder.

Например, запись в списке может иметь изображение слева и две строки текста посередине, как показано на следующем рисунке.

Пример макета представления Recycler
< /p>

Файл макета для такой строки может выглядеть следующим образом.

1.4. Зависимость Gradle для использования представления переработчика

Виджет RecyclerView поставляется в виде библиотеки и может использоваться начиная с уровня API 7 или выше. Добавьте зависимость последней версии этой библиотеки в файл сборки Gradle, чтобы использовать ее.

1,5. Менеджер компоновки по умолчанию

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

LinearLayoutManager отображает элементы в списке с вертикальной или горизонтальной прокруткой.

GridLayoutManager показывает элементы в сетке.

StaggeredGridLayoutManager отображает элементы в шахматном порядке.

1.6. Соответствующие классы реализации для использования RecyclerView

Для реализации RecyclerView требуется реализовать несколько классов. Наиболее важные классы перечислены в следующей таблице

Предоставляет данные и отвечает за создание представлений для отдельной записи

Содержит ссылки для всех представлений, заполненных данными записи

Содержит ссылки для всех представлений, заполненных данными записи

Обязательно, но доступны реализации по умолчанию

Отвечает за рисование украшений вокруг или поверх контейнера представления записи

Поведение по умолчанию, но его можно переопределить

Отвечает за определение анимации при добавлении, удалении или изменении порядка записей

Поведение по умолчанию, но его можно переопределить

Вы также можете предоставить собственные реализации для менеджеров компоновки и анимации.

1.7. Обработка событий кликов в представлении переработчика

События касания, такие как щелчок, должны обрабатываться представлениями в представлении переработчика. Если представление должно запускать что-то в объекте, в котором оно используется (активность или фрагмент), вы можете перейти к нему через конструктор адаптера. Это позволяет адаптеру сохранять ссылку на объект и вызывать его методы для обратной связи.

1.8. Макеты в режиме переработчика

Адаптер должен предоставлять иерархию представлений для каждой записи. Обычно это делается путем расширения XML-файла макета.

Используйте wrap_content или ?android:attr/listPreferredItemHeight для высоты контейнера представления для строки.

Этот корень макета обычно представляет собой ViewGroup (менеджер макета) и содержит несколько других представлений. На следующем рисунке показан список с разными макетами для нечетных и четных строк.

Adapter предоставляет данные и определяет макет для каждой строки

В методе getItemViewType представление переработчика определяет, какой тип следует использовать для данных. Платформа автоматически вызывает метод onCreateViewHolder, если это необходимо для этого типа. В этом методе вы увеличиваете правильный макет для типа и возвращаете подходящий держатель вида.

1.9. Пользовательские анимации

Чтобы настроить анимацию в RecyclerView, реализуйте собственную анимацию, расширив класс RecyclerView.ItemAnimator, и используйте метод RecyclerView.setItemAnimator(), чтобы назначить ее виджету.

1.10. Фильтрация и сортировка

Фильтрация и сортировка данных выполняются адаптером. Вам необходимо внедрить логику в собственную реализацию адаптера.

1.11. Обновление данных в адаптере

Метод notifyItemInserted(position) адаптера можно использовать для уведомления представления о том, что новая запись была вставлена ​​в определенную позицию.

Уведомление об удалении элемента(позиция); можно использовать для уведомления представления об удалении записи в определенной позиции.

1.12. Поддержка смахивания для RecyclerView

Класс ItemTouchHelper, упрощающий реализацию функций смахивания для закрытия и перетаскивания. Реализуйте метод onMove для перетаскивания и метод onSwiped для поддержки перелистывания.

2. Упражнение. Использование RecyclerView в новом приложении для Android

В этом упражнении вы создадите проект, использующий класс RecyclerView для отображения списка.

Пример RecyclerView

2.1. Создайте проект и добавьте зависимость Gradle

Создайте новый проект Android, используя имя пакета верхнего уровня com.vogella.android.recyclerview.

Добавьте следующую зависимость в файл сборки Gradle.

2.2. Создать файлы макета

Создайте или обновите файл макета с именем activity_main.xml, чтобы он содержал RecyclerView

Примечание. ImageView имеет установленный атрибут android:elevation, который указывает Android отрисовывать для него тень.

В Android RecyclerView представляет собой расширенную и гибкую версию ListView и GridView. Это контейнер, используемый для отображения большого количества наборов данных, которые можно очень эффективно прокручивать, поддерживая ограниченное количество просмотров. RecyclerView был представлен в Material Design на уровне API 21 (Android 5.0, т.е. Lollipop).

RecyclerView в Android

Этот новый виджет — большой шаг вперед в отображении данных в Material Design, поскольку ListView и GridView являются одними из наиболее часто используемых виджетов пользовательского интерфейса. В RecyclerView android реализовано множество новых функций, которых нет в существующих ListView или GridView.

Важное примечание:

В Android RecyclerView позволяет реализовать горизонтальный, вертикальный и расширяемый список. В основном он используется, когда у нас есть коллекции данных, элементы которых могут изменяться во время выполнения в зависимости от действий пользователя или любых сетевых событий. Для использования этого виджета мы должны указать адаптер и менеджер компоновки.

Базовый XML-код RecyclerView:

Зависимость Gradle для использования RecyclerView:

Виджет RecyclerView является частью отдельной библиотеки, доступной для уровня API 7 или выше. Добавьте следующую зависимость в файл сборки Gradle, чтобы использовать recyclerview.

Сценарии Gradle > build.gradle и внутренние зависимости

Оглавление

Необходимость RecyclerView в Android

RecyclerView использует ViewHolder для хранения ссылки на представление для одной записи в RecyclerView. Когда мы используем ListView или GridView для отображения пользовательских элементов, мы создаем собственный XML-файл, а затем используем его внутри нашего адаптера. Для этого мы создаем класс CustomAdapter, а затем расширяем в нем нашу базу или любой другой адаптер. В методе getView() нашего адаптера мы расширяем XML-файл макета элемента, а затем даем ссылку на каждое представление, используя уникальный идентификатор, который мы предоставляем в нашем XML-файле. После завершения мы передаем это представление в ListView, готовое к рисованию, но правда в том, что ListView и GridView выполняют только половину работы по достижению истинной эффективности использования памяти.

ListView/GridView повторно использует макет элемента, но не сохраняет ссылку на дочерние элементы макета, что вынуждает нас вызывать findViewById() для каждого дочернего элемента макета нашего элемента при каждом вызове getView(). Эта проблема вызывает проблемы с прокруткой или отсутствием отклика, поскольку он лихорадочно пытается получить ссылки на нужные нам представления.

С появлением RecyclerView все изменилось. RecyclerView по-прежнему использует адаптер в качестве источника данных, но в этом случае нам нужно создать ViewHolder, чтобы сохранить ссылку на View в памяти, поэтому, когда нам нужно новое представление, он либо создает новый объект ViewHolder для раздувания макета и хранения этих ссылок, либо он перерабатывает один из существующего стека.

Компоненты RecyclerView в Android

Ниже мы определяем наиболее часто используемые компоненты RecyclerView.

<р>1. Менеджеры макетов:

В Android RecyclerView должен иметь диспетчер компоновки и адаптер для создания экземпляра. Диспетчер макетов — это очень новая концепция, представленная в RecyclerView для определения типа макета, который должен использовать RecyclerView. Он содержит ссылки для всех представлений, заполненных данными записи. Мы можем создать пользовательский менеджер макетов, расширив класс RecyclerView.LayoutManager, но RecyclerView предоставляет три типа встроенных менеджеров макетов.

Linear Layout Manager — используется для отображения элементов данных в виде списка с горизонтальной или вертикальной прокруткой.
GridLayoutManager — используется для отображения элементов в формате сетки.
StaggeredGridLayoutManager — используется для отображения элементы в шахматной сетке.

Ниже мы подробно объясним каждый тип:

Диспетчер линейных макетов

RecyclerView как ListView в Android Studio


Используется для отображения элементов данных в списке с горизонтальной или вертикальной прокруткой. Если нам нужен список (вертикальный или горизонтальный), нам нужно использовать LinearLayoutManager с требуемой ориентацией. Простыми словами мы можем сказать, что мы используем LinearLayoutManager для отображения RecyclerView как ListView.

Открытый конструктор для LinearLayoutManager

    LinearLayoutManager (контекст контекста): используется для создания вертикального LinearLayoutManager. В этом нам нужно установить только один параметр, который используется для установки контекста текущего действия. EExample: В приведенном ниже фрагменте кода показано, как использовать этот конструктор в Android.
    С вертикальной ориентацией по умолчанию:

С горизонтальной ориентацией:

Менеджер разметки сетки

RecyclerView как GridView в Android Studio


Используется для отображения элементов в формате сетки. Если нам нужно отображать элементы в формате сетки, мы можем использовать GridLayoutManager. Простыми словами можно сказать, что мы используем GridLayoutManager для отображения RecyclerView как GridView.
Открытый конструктор для GridLayoutManager:

    GridLayoutManager (контекстный контекст, int spanCount): используется для создания вертикального GridLayoutManager. В этом конструкторе первый параметр используется для установки текущего контекста, а второй параметр используется для установки значения spanCount, означающего количество столбцов в сетке.
    Пример. В приведенном ниже фрагменте кода показано, как использовать этот конструктор в Android.
    С вертикальной ориентацией по умолчанию:

С горизонтальной ориентацией:

StaggeredGridLayoutManager

GridView и шахматная сетка в Android Studio


Он используется для отображения элементов в шахматной сетке.

Открытый конструктор для StaggeredGridLayoutManager

    StaggeredGridLayoutManager(int spanCount, int ориентация): используется для создания StaggeredGridLayoutManager с заданными параметрами. Первый параметр используется для установки spanCount, что означает количество столбцов, если ориентация вертикальная, или количество строк, если ориентация горизонтальная. Второй параметр используется для установки ориентации, она должна быть вертикальной или горизонтальной.
    Пример. В приведенном ниже фрагменте кода показано, как использовать этот конструктор в Android.
    С вертикальной ориентацией:

С горизонтальной ориентацией:

2.ViewHolder: ViewHolder используется для хранения ссылки на представление для одной записи в RecyclerView. ViewHolder — это статический внутренний класс в нашем адаптере, который содержит ссылки на соответствующие представления. Используя эти ссылки, наш код может избежать трудоемкого метода findViewById() для обновления виджетов новыми данными.

<р>3. RecyclerView.Adapter:
RecyclerView включает новый тип адаптера. Это аналогичный подход к тем, которые мы уже использовали, но с некоторыми особенностями, такими как обязательный ViewHolder для обработки представлений. Нам нужно будет переопределить два основных метода: первый, чтобы раздуть представление и его вьюхолдер, и второй, чтобы привязать данные к представлению. Главный плюс в том, что первый метод вызывается только тогда, когда нам действительно нужно создать новое представление.

В приведенном ниже фрагменте кода показано, как выглядит наш CustomAdapter, когда мы расширяем в нем класс RecyclerView.Adapter.

<р>4. ItemAnimator: RecyclerView.ItemAnimator будет анимировать изменения ViewGroup, такие как удаление, выбор, добавление, которые уведомляют адаптер. DefaultItemAnimator можно использовать для предоставления анимации по умолчанию, и он работает достаточно хорошо.

Пример RecyclerView в Android Studio:

Ниже приведен пример RecyclerView, в котором мы отображаем список имен людей с помощью RecyclerView. В этом примере мы используем LinearLayoutManager с вертикальной ориентацией для отображения элементов. Сначала мы объявляем RecyclerView в нашем XML-файле, а затем получаем ссылку на него в нашей Activity. После этого мы создаем ArrayList для имен людей и устанавливаем LayoutManager, и, наконец, мы устанавливаем адаптер для отображения элементов в RecyclerView. Всякий раз, когда пользователь нажимает на элемент, имя человека отображается на экране с помощью Toast.

 Пример RecyclerView в Android Studio


Шаг 1. Создайте новый проект и назовите его RecyclerView Example.

Шаг 2. Откройте Gradle Scripts > build.gradle и добавьте в него зависимость библиотеки RecyclerView.

Шаг 3. Откройте res -> layout -> activity_main.xml (или) main.xml и добавьте следующий код:

На этом шаге мы создаем RecyclerView в нашем файле XML.

Шаг 4. Создайте новый XML-файл rowlayout.xml для элемента RecyclerView и вставьте в него следующий код.

На этом шаге мы создаем новый XML-файл для строки элемента, в котором мы создаем TextView для отображения данных.

Шаг 5. Теперь откройте app -> java -> package -> MainActivity.java и добавьте приведенный ниже код.

На этом шаге мы сначала получаем ссылку на RecyclerView. После этого мы создаем ArrayList для имен людей и устанавливаем LayoutManager, и, наконец, мы устанавливаем адаптер для отображения элементов в RecyclerView.

Шаг 6. Создайте новый класс CustomAdapter.java внутри пакета и добавьте следующий код.

На этом шаге мы создаем класс CustomAdapter и расширяем класс RecyclerView.Adapter с помощью ViewHolder. После этого мы реализуем переопределенные методы и создаем конструктор для получения данных из Activity. В этом пользовательском адаптере более важны два метода: первый — onCreateViewHolder, в котором мы раздуваем элемент макета xml и передаем его в View Holder, а другой — onBindViewHolder, в котором мы устанавливаем данные в представлении с помощью ViewHolder.

Вывод:

Теперь запустите приложение, и вы увидите разные имена людей, перечисленные в ListView.

В этом учебном пособии по Android RecyclerView мы узнаем, как использовать виджет RecyclerView в нашем приложении для Android.

Мы возьмем список строк и отобразим их как элементы в виджете RecyclerView.

На следующем снимке экрана показан окончательный результат нашего руководства по RecyclerView.

Пример Android RecyclerView

Ниже приведен пошаговый процесс отображения элементов в виджете RecyclerView.

Полная структура проекта с расположением файлов показана на следующем снимке экрана.

RecyclerView — Структура проекта

Шаг 1

Создайте проект Android с пустой активностью. Мы сохраняем значения по умолчанию для имени и имени пакета.

Выберите Kotlin в качестве языка.

Android RecyclerView Tutorial

Шаг 2

Добавьте виджет RecyclerView в файл activity_main.xml. Обратите внимание на идентификатор, который мы предоставили для этого виджета RecyclerView.

Ширина и высота этого виджета RecyclerView соответствуют родительскому элементу.

activity_main.xml

Шаг 3

Создайте файл макета item.xml. Этот файл макета используется для отображения каждого элемента в виджете RecylcerView.

Каждый элемент в RecyclerView отображается как LinearLayout с одним TextView в нем. Обратите внимание на идентификатор элемента TextView TextView . Нам понадобится этот идентификатор, чтобы установить текст этого TextView со строковым значением элемента.

item.xml

Шаг 4

Создайте собственный адаптер, который расширяет RecyclerView.Adapter. Этот адаптер позаботится о заполнении элементов значениями.

В классе Custom Adapter мы переопределяем три метода, которые отвечают за создание и установку значений для элементов в RecyclerView.

  1. onCreateViewHolder() создает виджет MyViewHolder для каждого элемента с указанным макетом item.xml.
  2. onBindViewHolder() получает виджет MyViewHolder для каждого элемента и положение элемента в качестве аргументов. Используя позицию, мы можем получить элемент из списка элементов. И мы можем использовать этот элемент (в данном случае String) для обновления виджета MyViewHolder, который отображается как элемент (LinearLayout с TextView) в RecyclerView.
  3. getItemCount() задает количество элементов, отображаемых в RecyclerView. Мы устанавливаем этот размер равным размеру списка элементов ArrayList, в котором мы храним строки.

CustomAdapter.kt

Шаг 5

  1. Получите ссылку на RecyclerView в файле макета activity_main.xml. Идентификатор RecyclerView в файле макета — recyclerView .
  2. Инициализируйте CustomAdapter со списком элементов.
  3. Установите Layout Manager с помощью LinearLayoutManager для RecyclerView.
  4. Установите адаптер с помощью CustomAdapter для RecyclerView.
  5. Теперь мы можем подготовить элементы и обновить RecyclerView через CustomAdapter, используя notifyDataSetChanged().

MainActivity.kt

Шаг 6

Запустите это приложение для Android. Мы получим следующий экран.

Android RecyclerView

RecyclerView можно прокручивать. Итак, мы должны иметь возможность прокручивать элементы в этом RecyclerView.

Шаг 7

Вы можете открыть Layout Inspector в Android Studio 4, Menu > View > Tool Windows > Layout Inspector и просмотреть элементы внутри RecyclerView.

Android RecyclerView — макет Инспектор

Загрузить проект Android Tutorial RecyclerView

Вы можете загрузить весь этот учебный проект RecyclerView по следующей ссылке.

Заключение

В этом учебнике Kotlin для Android мы узнали, как отобразить список элементов в RecyclerView, шаг за шагом, с помощью примера приложения для Android.

Читайте также: