Глубокое погружение | Серии: 02
Категория: Android-разработчики | Котлин
Это серия блогов, которые помогут вам понять концепцию RecyclerView и продемонстрировать ее реализацию. Добро пожаловать во второй блог из серии RecyclerView - A Deep Dive. В предыдущем блоге RecyclerView - Обзор вы познакомились с RecyclerView и это поведение. В этом блоге мы рассмотрим ключевые классы RecyclerView и его реализацию с помощью простого приложения, которое отображает список данных, содержащих только текст, чтобы понять работу RecyclerView .
Резюме
- Мы обсудили варианты использования RecyclerView и где они используются. Например: LinkedIn, Instagram, Facebook, Новости Google, экран истории звонков, приложение для контактов и любое ваше любимое приложение для обмена сообщениями.
- RecyclerView - это представление, предоставляемое Android, и является частью Android Jetpack, разработанного для более эффективного отображения данных в списке.
- Повторное использование или повторное использование RecyclerView позволяет легко и удобно реализовать список данных.
Изучение ключевых классов
В RecyclerView доступны различные ключевые классы для разных вариантов использования. Эти ключевые классы работают вместе, чтобы отображать список данных.
Элемент
Все данные в списке, которые должны отображаться, являются элементом.
ViewHolders
ViewHolder описывает, как должно отображаться представление элемента, то есть макет дизайна. Объект ViewHolder определяется для каждого отдельного элемента в списке. Объект ViewHolder - это просто держатель для каждого отдельного элемента, и он не содержит никаких данных для этого ViewHolder. RecyclerView.ViewHolder
- это способ определения ViewHolder.
Адаптер
Адаптеры отвечают за подготовку данных для представления и привязку их к ViewHolder. Данные могут быть определены в самом приложении (внутри strings.xml) или могут быть получены из базы данных, размещенной в Интернете. RecyclerView.Adapter
- вот как вы определяете адаптер.
LayoutManager
Каждое отдельное представление в списке необходимо расположить, и для этого мы используем LayoutManager.
- LinearLayoutManager
- GridLayoutManager
- StaggeredGridLayoutManager
Выше представлены менеджеры компоновки, предоставляемые нам библиотекой RecyclerView.
Хватит теории, пришло время программирования 😎
Обладая знаниями, которые мы узнали до сих пор, мы будем разрабатывать приложение, которое отображает список данных, содержащих только текст, с помощью RecyclerView. Мы будем разрабатывать приложение, которое будет отображать список имен наших друзей со слоганом. Мы назовем приложение «Мой приятель».
Шаг 1. Настройка проекта
- Откройте Android Studio (моя версия 4.1)
- Нажмите «Создать новый проект». ›› Пустое действие
- Введите имя приложения с помощью «Мой приятель», выберите место для сохранения по своему усмотрению, язык - Kotlin, минимальный SDK - API 21: Android 5.0 (Lollipop).
- Ожидание первой сборки проекта может занять несколько минут в зависимости от характеристик вашей системы.
Шаг 2. Разработка макета
- Go to
activity_main.xml
- Удалите существующий код и добавьте следующий код между
- Теперь нам нужно разработать макет для ViewHolder
- Создайте новый файл ресурсов макета, назовите его
item_layout.xml
и добавьте следующий код.
Шаг 3. Давайте подготовим наши данные и адаптер
- Сначала мы настроим данные для нашего RecyclerView. Для этого приложения мы будем использовать файл strings.xml для предоставления наших данных.
- Добавьте следующий код в
strings.xml
file или вы можете написать свои собственные данные.
<resources> <string name="app_name">My Buddy</string> <string name="buddy_name">Buddy Name</string> <string name="buddy_tag_line">Buddy Tag line</string> <string name="buddy_name_1"> Buddy Name 1 </string> <string name="buddy_tag_line_1"> Tag line for buddy name 1 </string> <string name="buddy_name_2"> Buddy Name 2 </string> <string name="buddy_tag_line_2"> Tag line for buddy name 2 </string> <string name="buddy_name_3"> Buddy Name 3 </string> <string name="buddy_tag_line_3"> Tag line for buddy name 3 </string> <string name="buddy_name_4"> Buddy Name 4 </string> <string name="buddy_tag_line_4"> Tag line for buddy name 4 </string> <string name="buddy_name_5"> Buddy Name 5 </string> <string name="buddy_tag_line_5"> Tag line for buddy name 5 </string> <string name="buddy_name_6"> Buddy Name 6 </string> <string name="buddy_tag_line_6"> Tag line for buddy name 6 </string> <string name="buddy_name_7"> Buddy Name 7 </string> <string name="buddy_tag_line_7"> Tag line for buddy name 7 </string> <string name="buddy_name_8"> Buddy Name 8 </string> <string name="buddy_tag_line_8"> Tag line for buddy name 8 </string> <string name="buddy_name_9"> Buddy Name 9 </string> <string name="buddy_tag_line_9"> Tag line for buddy name 9 </string> <string name="buddy_name_10"> Buddy Name 10 </string> <string name="buddy_tag_line_10"> Tag line for buddy name 10 </string> </resources>
- Теперь, когда у нас есть данные, давайте сначала создадим список этих данных, а затем с помощью RecyclerView.Adapter свяжем его с нашим ViewHolder.
Для любой разработки организация нашего кода - это очень любопытный прием для простого приложения, который не повлияет на эффективность нашей разработки, но когда код станет больше, если наш код не организован, будет очень сложно поддерживать и обновлять наше программное обеспечение. . «Гонка начинается с первого шага, который мы делаем» Итак, уже в первом приложении мы организуем наш код более эффективным образом.
- Сначала создайте три новых пакета внутри основного пакета и назовите их «адаптер», «данные» и «модель».
- Посмотрите на изображение ниже и поймите структуру нашего приложения.
- Не говоря уже о файлах внутри вновь созданных пакетов, мы обсудим их ниже.
- Сначала создайте класс данных внутри пакета модели и назовите его
BuddyModel.kt
- Мы создаем модель или формат для списка данных, то есть в каком виде и в каком порядке данные должны быть отправлены в список.
- Добавьте приведенный ниже код внутрь
BuddyModel.kt
- Когда мы создаем список данных на основе этой модели, вызывающий может передавать аргументы в неправильном порядке, чтобы избежать этой ошибки, мы используем r аннотации esource, это проверяет, передаются ли данные в желаемый заказ или нет.
- Затем мы создаем класс
BuddyData.kt
внутри пакета данных. Здесь мы фактически создаем список данных, которые мы извлекаем изstrings.xml
файла. - Добавьте приведенный ниже код внутрь
BuddyData.kt
- Теперь наш список данных готов. Далее идет адаптер, который связывает ViewHolder и данные.
- Создайте
BuddyAdapter.kt
внутри пакета адаптера. - Сначала объявите переменные, которые нам нужны для класса адаптера. Мы передадим контекст и данные из основного действия в адаптер.
- Внутри BuddyAdapter Class создайте ItemViewHolder Class, как показано ниже.
class BuddyAdapter( private val context: Context, private val dataset: List<BuddyModel> ): RecyclerView.Adapter<BuddyAdapter.ItemViewHolder>() { class ItemViewHolder(view: View): RecyclerView.ViewHolder(view) { val buddyName: TextView = view.findViewById(R.id.buddy_name) val buddyTagLine: TextView = view.findViewById(R.id.buddy_tag_line) } }
- На этом этапе вы заметите ошибку в классе BuddyAdapter, поместите курсор на имя класса, и вам будет предложено реализовать элементы абстрактного базового класса, как показано на изображении ниже. Щелкните на всех трех членах, чтобы получить код котла.
- Вам потребуется переопределить три функции с членами базового класса.
- Сначала мы переопределяем функцию
onCreateViewHolder
. Здесь мы раздуваем макет ViewHolder, то естьitem_layout.xml
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( LayoutInflater.from(parent.context) .inflate(R.layout.item_layout, parent, false) ) }
- Затем мы переопределяем функцию
onBindViewHolder
, здесь мы привязываем данные, которые передаются из основного класса активности, и макет ViewHolder, и здесь определяются другие действия, такие как onclick или любая другая функция.
override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { val item = dataset[position] holder.buddyName.text = context.resources.getString(item.buddyNameResourceId) holder.buddyTagLine.text = context.resources.getString(item.buddyTagLineResourceId) }
- Приведенный выше код очень прост: мы получаем текст из набора данных, то есть BuddyData, и передаем его в соответствующие представления макета.
- Наконец, мы переопределяем
getItemCount
и возвращаем общий размер нашего набора данных. Ниже приведен полный код дляBuddyAdapter.kt
- Мы закончили с шагом 3.
Шаг 4: Добавление RecyclerView в MainActivity
- В
MainActivity.kt
мы инициализируем представление ресайклера и его адаптер.
Шаг 5. Создайте и запустите свой проект
- Перейдите в Build ›› Make Project, чтобы создать свой проект. После успешной сборки вы можете запустить приложение.
- Вы можете запустить свое приложение на своем физическом устройстве или использовать эмулятор, предоставленный Android Studio.
- Мой приятель готов.
- Вы можете получить полный проект здесь
Что дальше?
В следующей серии RecyclerView мы реализуем RecyclerView с несколькими типами представления, которые наиболее распространены в любом приложении. Мы снова разрабатываем приложение, которое отображает список данных в RecyclerView с несколькими типами представления, что-то похожее на новостную ленту.
Следующее в этой серии: RecyclerView - с несколькими типами просмотра
Список серий RecyclerView
Другие публикации Talking Community
Прокомментируйте свои предложения, если таковые имеются.
Найдите меня в LinkedIn: Симучанд Б
Если вам понравился блог, не беда, хлопайте в ладоши👏 и поделитесь этим со своими друзьями, которые извлекут выгоду. Кстати, не забывайте следить 💙