Android studio recyclerview горизонтальный

RecyclerView

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

Раньше для отображения прокручиваемого списка использовался ListView. Со временем у него обнаружилось множество недостатков, которые было трудно исправить. Тогда решили создать новый элемент с нуля.

Вначале это был сырой продукт, потом его доработали. На данном этапе можно считать, что он стал полноценной заменой устаревшего ListView.

Схематично работу RecyclerView можно представить следующим образом. На экране отображаются видимые элементы списка. Когда при прокрутке списка верхний элемент уходит за пределы экрана и становится невидимым, его содержимое очищается. При этом сам «чистый» элемент помещается вниз экрана и заполняется новыми данными, иными словами переиспользуется, отсюда название Recycle.

Компонент RecyclerView не является родственником ListView и относится к семейству ViewGroup. Он часто используется как замена ListView, но его возможности шире.

Следует сказать, что при работе с ним приходится писать много кода, который пугает новичков. Если с RecyclerView работать не постоянно, то порой забываются детали и сложно вспомнить необходимые шаги. Многие просто сохраняют отдельные шаблоны и копируют в разные проекты.

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

Для размещения своих дочерних элементов используется специальный менеджер макетов LayoutManager. Он может быть трёх видов.

  • LinearLayoutManager — дочерние элементы размещаются вертикально (как в ListView) или горизонтально
  • GridLayoutManager — дочерние элементы размещаются в сетке, как в GridView
  • StaggeredGridLayoutManager — неравномерная сетка

Можно создать собственный менеджер на основе RecyclerView.LayoutManager.

RecyclerView.ItemDecoration позволяет работать с дочерними элементами: отступы, внешний вид.

ItemAnimator — отвечает за анимацию элементов при добавлении, удалении и других операций.

RecyclerView.Adapter связывает данные с компонентом и отслеживает изменения.

  • notifyItemInserted(), notifyItemRemoved(), notifyItemChanged() — методы, отслеживающие добавление, удаление или изменение позиции одного элемента
  • notifyItemRangeInserted(), notifyItemRangeRemoved(), notifyItemRangeChanged() — методы, отслеживающие изменение порядка элеметов

Стандартный метод notifyDataSetChanged() поддерживается, но он не приводит к внешнему изменению элементов на экране.

Программисты со стажем знают, что для создания «правильного» ListView нужно было создавать класс ViewHolder. В старых списках его можно было игнорировать. Теперь это стало необходимым условием.

Общая модель работы компонента.

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

Размещаем компонент в макете экрана через панель инструментов. Но сначала добавим зависимость.

Создадим макет для отдельного элемента списка. Варианты могут быть самыми разными — можно использовать один TextView для отображения строк (имена котов), можно использовать связку ImageView и TextView (имена котов и их наглые морды). Мы возьмём для примера две текстовые метки. Создадим новый файл res/layout/recyclerview_item.xml.

Добавим компонент в разметку экрана активности.

Читайте также:  Утилита для удаления android

Минимальный код для запуска.

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

Начнём по порядку, чтобы запомнить последовательность. Для начала создадим обычный класс и в конструкторе передадим список строк. Список будет содержать имена котов.

Класс MyViewHolder на основе ViewHolder служит для оптимизации ресурсов. Новый класс добавим в состав нашего созданного ранее класса.

В созданном классе нужно просто перечислить используемые компоненты из макета для отдельного элемента списка. В нашем примере задействованы два TextView, инициализируем их через идентификаторы.

Создадим адаптер — наследуем наш класс от класса RecyclerView.Adapter и в качестве параметра указываем созданный нами MyViewHolder. Студия попросит реализовать три метода.

getItemCount()

Как правило данные являются однотипными, например, список или массив строк. Адаптеру нужно знать, сколько элементов нужно предоставить компоненту, чтобы распределить ресурсы и подготовиться к отображению на экране. При работе с коллекциями или массивом мы можем просто вычислить его длину и передать это значение методу адаптера getItemCount(). В простых случаях мы можем записать код в одну строчку.

onCreateViewHolder

В методе onCreateViewHolder нужно указать идентификатор макета для отдельного элемента списка, созданный нами ранее в файле recyclerview_item.xml. А также вернуть наш объект класса ViewHolder.

onBindViewHolder()

В методе адаптера onBindViewHolder() связываем используемые текстовые метки с данными — в одном случае это значения из списка, во втором используется одна и та же строка.

Должно получиться следующее.

Подключаем в активности. Создадим пока бессмысленный список строк, который передадим в адаптер.

Запускаем ещё раз.

Вариант с числами нам не интересен, поэтому добавим котов. Имена котов и кошек разместим в ресурсах в виде массива в файле res/values/strings.xml.

Создадим новую функцию для получения списка котов из ресурсов и передадим его адаптеру.

Горизонтальная прокрутка

Можем указать горизонтальный вариант прокрутки. Остальной код менять не придётся.

А можно вообще обойтись только XML-декларацией.

Оптимизация

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

При работе с изображениями старайтесь использовать готовые библиотеки Picasso, Glide, Fresco и т.д.

Если картинки загружаются с сервера, неплохо заранее вычислять их размеры и пропорции. В некоторых случаях желательно позаботиться, чтобы картинки были одного размера (если это возможно).

Не перегружайте лишним кодом метод onBindViewHolder(). Только самое необходимое.

Источник

Как создать горизонтальный ListView с RecyclerView?

Мне нужно реализовать горизонтальный список в приложении для Android. Я сделал несколько исследований и наткнулся. Как создать горизонтальный ListView в Android? И горизонтальный ListView в Android? Однако эти вопросы были заданы перед выпуском Recyclerview. Есть ли лучший способ реализовать это сейчас с Recyclerview?

Есть ли лучший способ реализовать это сейчас с Recyclerview?

Когда вы используете RecyclerView , вам нужно указать LayoutManager который отвечает за прокладку каждого элемента в представлении. LinearLayoutManager позволяет вам указать ориентацию, как и обычный LinearLayout .

Чтобы создать горизонтальный список с помощью RecyclerView , вы можете сделать что-то вроде этого:

Попытка построить горизонтальный ListView занимает слишком много времени. Я разрешил это двумя способами.

1. Используя ViewPager, адаптер которого простирается от PagerAdapter.

Читайте также:  Player проигрыватель для андроид

2. Используйте RecyclerView так же, как указано выше. Необходимо применить LayoutManager, как в следующем коде:

Если вы хотите использовать RecyclerView с GridLayoutManager, это способ достижения горизонтальной прокрутки.

Если вы хотите использовать Horizontal Recycler View, чтобы выступать в качестве ViewPager, тогда это возможно теперь с помощью LinearSnapHelper который добавляется в Support Library версии 24.2.0.

Сначала добавьте RecyclerView в свою активность / фрагмент

В моем случае я использовал CardView внутри RecyclerView

blog_row.xml

В вашей деятельности / фрагменте

Последний шаг – установить адаптер для RecyclerView

С выпуском библиотеки RecyclerView теперь вы можете легко совместить список изображений с текстом. Вы можете использовать LinearLayoutManager, чтобы указать направление, в котором вы хотели бы сориентировать свой список, вертикальный или горизонтальный, как показано ниже.

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

Существует подкласс RecyclerView с именем HorizontalGridView, который вы можете использовать для горизонтального направления. VerticalGridView для вертикального направления

Источник

Android Horizontal RecyclerView CardView And Images Example

Android Horizontal RecyclerView CardView And Images Example Tutorial is written here.

Generally, we create vertical recyclerview to show the data in tabular manner.

In this tutorial, we will implement a recyclerview with the horizontal variant instead of vertical.

By default, recyclerview is vertical but android provides a built in method to make recyclerview horizontal.

While we do not have any such method in ListView. So it is easier to make horizontal recyclerview than horizontal listview.

Of course we get same functionality if we make horizontal listview but it is little complex task.

Web Host Recommendation

If you are planning to buy best web hosting at an affordable prize then we recommend bluehost.

(Disclaimer : If you sign up using the above link we may receive small commission without any addition cost to you)

Look of horizontal Recyclerview

If you want to create a horizontal listview then

Follow all the below steps to make horizontal recyclerview.

Step 1. Making Dependencies

To implement recyclerview and cardview, we need to add dependencies separately.

Write the following lines in build.gradle(Module: app)

These lines will fetch required classes to use recyclerview and cardview in your android app.

Step 2. Special Layout File

In recyclerview, we need to create additional layout xml file.

This file will create a view for every single row item. Adapter class will inflate this file while generating the recyclerview row items.

Make a new file res->layout structure. Give it a name as recycler_item.xml

Copy the following source code in recycler_item.xml

As we want to make a cardview, here I have set it in the above file.

Cardview is the parent of all the other views.

Then inside cardview, I have taken one Linearlayout with vertical orientation.

Inside this linearlayout, one imageview and one textview is present. Imageview will be above the textview.

Downloading Images

We will set fruit images in our horizontal recyclerview.

You can download the required fruit images by clicking the below link.

After downloading the images, copy them into the res->drawable directory.

Step 3. Fruit Model

Now let us create a model class. This class is useful to maintain proper data structure.

Create a new class named “FruitModel.java” and add the following code in it.

Читайте также:  Android downloader 3667 как удалить

This class includes the getter ans setter methods for all the UI widgets which are present in the every row of the recyclerview.

In this example, we have one imageview and textview each, so this model have methods for image and text as you can show in the above code.

Step 4. Fruit Adapter

Adapter class will use the data and will create a recyclerview.

Prepare a new class named “FruitAdapter.java”

Write down the below coding lines in “FruitAdapter.java”

Looking Heavily At Adapter

Let us understand the below code

Above is the constructor of FruitAdapter class. It has two parameters.

First parameter will get context and second will get arraylist (imageModelArraList) of the objects of the FruitModel class.

This arraylist imageModelArraList will provide appropriate data to the adapter class.

onBindViewHolder() method

Below is the code for onBindViewHolder() method.

This method will set text in textview and image in the imageview.

It will use that arraylist (imageModelArraList ) to fetch the data.

Compiler will call this method for number of time which is equal to the number of rows in the recyclerview.

Step 5. Last Modifications

Last but not least, make changes in the activity_main.xml and MainActivity.java file.

Copy the following code snippet in activity_main.xml

In the main layout file, I have write only recyclerview code.

Code snippet for MainActivity.java will be as below

How does MainActivity.java works ?

Consider the following source code

Line one is creating an object of the RecyclerView class.

Second line is making an arraylist with the objects of the FruitModel class.

Third will create an object of FruitAdapter class.

Fourth line will create one integer array named myImageList. This myImageList contains as integer reference of the fruit images present in the drawable folder.

Fifth line makes a string array myImageNameList.

myImageNameList holds the names of the fruits.

Attend the following code

Above line is populating an arraylist using the eatFruits method.

Below is the code for eatFruits() methods.

This method will rotate a for loop with seven iterations.

During every iterations, compiler will create an object of the FruitModel class.

Then it will set the image integer reference and image name to that object.

After that compiler will add this object in to the arraylist and this process continues for seven times.

Read the following coding lines

Compiler will create an object of FruitAdapter class with required parameters during first line.

By reading the second line, system will set the adapter with the recyclerview.

Now third line is the most important for us.

It will set the layout to the recyclerview. We are telling compiler to make our recyclerview horizontal in this line.

So, now if you run your project, you should get the output like the video you watched at the starting of the tutorial.

Web Host Recommendation

If you are planning to buy best web hosting at an affordable prize then we recommend bluehost.

(Disclaimer : If you sign up using the above link we may receive small commission without any addition cost to you)

Источник

Оцените статью