Рубрики
Без рубрики

Как создать список горизонтальной компоновки с помощью Recyclerview

Вы часто сталкиваетесь с ситуациями, когда вам необходимо обрабатывать списки элементов при разработке мобильных приложений. Один… Помечено как android, java, новички.

Вы часто сталкиваетесь с ситуациями, когда вам необходимо обрабатывать списки элементов при разработке мобильных приложений. Один из подходов, который вы могли бы использовать, – это использование ListView и Адаптер массива (если ваши данные хранятся в списке массивов ), как я объяснил в моей предыдущей статье . Это неплохой подход, но оказывается, что он подходит только для вертикальной компоновки. Поскольку я искал способ отображать элементы моего списка горизонтально и с возможностью прокрутки, используя Recyclerview представляется одним из лучших подходов.

Что такое RecyclerView?

Если вы знакомы с ListView , RecyclerView является его улучшенной версией. Это позволяет нам реализовать более гибкую компоновку, а также еще эффективнее обрабатывать больший объем данных. Чтобы лучше понять RecyclerView , давайте рассмотрим некоторые функции и требования при использовании RecyclerView .

Для того, чтобы использовать RecyclerView , вам нужно работать с RecyclerView. Адаптер , Держатель для просмотра и Менеджер компоновки . Просмотр вторсырья. Адаптер – это адаптер, который заполняет дочерние элементы RecyclerView точно так же, как ArrayAdapter . Однако для этого требуется ViewHolder , который действует как своего рода шаблон дочернего элемента (шаблон ViewHolder). Держатель вида удобен для адаптера, так как содержит подробную информацию о представлениях в строке. Кроме того, сначала определяя этот шаблон держателя представления, он устраняет повторяющееся использование метода findViewById() . Это значительно избавляет нас от замедления производительности приложения при прокрутке элементов. Когда мы используем ArrayAdapter , процесс повторного просмотра был хорошим но нам все равно нужно несколько раз вызывать метод findViewById() для поиска элементов для обновления данных представления. По сравнению с этим использование подхода ViewHolder определенно более эффективно.

Теперь давайте поговорим о другом ключевом игроке этой темы, LayoutManager . Как упоминалось выше, одним из преимуществ использования Просмотр вторсырья - горизонтальная компоновка списка , и это благодаря Менеджеру компоновки . Менеджер компоновки в основном отвечает за позиционирование дочерних элементов, а также за принятие решения о повторном использовании старых представлений. RecyclerView предлагает гибкие макеты и 3 различных Менеджер компоновки

  • LinearLayoutManager : отображение элементов по вертикали или горизонтали
  • GridLayoutManager : отображение элементов в сетке по вертикали или горизонтали
  • StaggeredGridLayoutManager : отображение элементов в сетке в шахматном порядке (допускается разная ширина/высота)

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

Как использовать RecyclerView

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

  1. Определите класс модели под названием Subject для хранения всех ваших типов полей (имя темы, изображение и количество лайков).
  2. Заполните данные вашего субъекта и сохраните их в ArrayList
  3. Определите расположение каждого элемента списка (2 TextView s и 1 Просмотр изображений )
  4. Создайте пользовательский RecyclerView и Владелец просмотра для элементы списка витрин
  5. Настройте пользовательский RecyclerView с помощью Менеджера компоновки и адаптера

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

// Subject.java

public class Subject {
    private String subject;
    private int imageId;
    private int numOfLikes;

    // Constructor
    public Subject(String subject, int imageId, int numOfLikes){
        this.subject = subject;
        this.imageId = imageId;
        this.numOfLikes = numOfLikes;
    }

    //Setting up the getter methods
    public String getSubject() {
        return subject;
    }

    public int getImageId() {
        return imageId;
    }

    public int getNumOfLikes() {
        return numOfLikes;
    }
}

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

// MainActivity.java

ArrayList subjectArrayList = new ArrayList<>();
subjectArrayList.add(new Subject("English", R.drawable.english, 27));
subjectArrayList.add(new Subject("Math", R.drawable.math, 13));
subjectArrayList.add(new Subject("P.E", R.drawable.pe, 45));
subjectArrayList.add(new Subject("Science", R.drawable.science, 41));
subjectArrayList.add(new Subject("Art", R.drawable.art, 36));
....etc

Далее мы быстро настроим макет отдельного элемента. Как уже упоминалось, для примера в этой статье у нас будет 2 просмотра текста и 1 просмотр изображения. Просто обратите внимание, что если вы хотите, чтобы ваш макет был ВЕРТИКАЛЬНЫМ, будьте осторожны с высотой строки (корневой вид списка), как это необходимо wrap_content для правильного отображения ваших товаров.

// list_item.xml


    

    

    


Теперь мы перейдем к нашему адаптеру пользовательских тем, который расширяет RecyclerView. Адаптер . Пожалуйста, обратите внимание, что нам необходимо определить пользовательского владельца просмотра, чтобы указать и предоставить доступ ко всем представлениям. Это связано с тем, что мы будем использовать этот пользовательский ViewHolder позже для привязки данных. Это также не позволяет нам вызывать методы findById() несколько раз, когда адаптер назначает данные соответствующим представлениям.

// SubjectAdapter.java

public class SubjectAdapter extends RecyclerView.Adapter {
    // This is a template - give a direct reference to each view
    public class ViewHolder extends RecyclerView.ViewHolder{
        public ImageView subjectImageView;
        public TextView subjectTextView;
        public TextView numOfLikesTextView;

        // Constructor - accepts entire row item
        public ViewHolder(@NonNull View itemView) {
            super(itemView);

            // Find each view by id you set up in the list_item.xml
            subjectImageView = itemView.findViewById(R.id.subject_image_view);
            subjectTextView = itemView.findViewById(R.id.subject_text_view);
            numOfLikesTextView = itemView.findViewById(R.id.likes_text_view);
        }
    }
}


После настройки ViewHolder давайте начнем работать над адаптером прямо сейчас. Здесь нужно сделать 4 основные вещи: настроить конструктор и переопределить 3 различных метода, которые являются onCreateViewHolder() , onBindViewHolder() и getItemCount() .

// SubjectAdapter.java

public class SubjectAdapter extends RecyclerView.Adapter {

    // ... ViewHolder class and its constructor as per above


    ArrayList list;

    // Constructor
    public SubjectAdapter(ArrayList list){
        this.list = list;
    }

    // Creating a viewHolder
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        // Inflate the layout
        View contactView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.list_item, parent, false);

        // Return a new holder instance
        ViewHolder viewHolder = new ViewHolder(contactView);

        return viewHolder;
    }

    // Assigning respective data for the views based on the position of the current item
    @Override
    public void onBindViewHolder(@NonNull SubjectAdapter.ViewHolder holder, int position) {
        // Get the Subject based on the current position
        Subject currentItem = list.get(position);

        // Setting views with the corresponding data
        ImageView imageView = holder.subjectImageView;
        imageView.setImageResource(currentItem.getImageId());

        TextView subjectTextView = holder.subjectTextView;
        subjectTextView.setText(currentItem.getSubject());

        TextView likesTextView = holder.numOfLikesTextView;
        likesTextView.setText(currentItem.getSubject());
    }

    // Indicating how long your data is
    @Override
    public int getItemCount() {
        return list.size();
    }
}

Здесь мы начнем с настройки конструктора для адаптера. Просто передайте список данных, чтобы наш адаптер мог использовать его для заполнения элементов. Далее давайте рассмотрим метод onCreateViewHolder() . Этот метод вызывается Менеджером компоновки и при необходимости обрабатывает раздувание компоновки. Возвращение владельца просмотра со всеми необходимыми деталями также является его ролью. Переходя к следующему, метод onBindViewHolder() играет решающую роль в привязке данных к соответствующим представлениям. Используя предопределенные сведения о представлении из ViewHolder , ему удается эффективно заменять содержимое. Наконец, метод getItemCount() – это способ сообщить адаптеру о размере ваших данных, который представляет собой общее количество элементов для демонстрации.

После прохождения описанного выше процесса все, что вам нужно сделать, это настроить Recyclerview с вашим пользовательским адаптером и Менеджером компоновки

// MainActivity.java

// Find RecyclerView by Id (from the activity_main.xml)
RecyclerView recyclerView = findViewById(R.id.recycler_view);
// Instantiate SubjectAdapter with the data
SubjectAdapter adapter = new SubjectAdapter(subjectsList);
// Set adapter with RecyclerView
recyclerView.setAdapter(adapter);
// Set LayoutManager
recyclerView.setLayoutManager(new LinearLayoutManager(this, RecyclerView.HORIZONTAL, false));

Здесь следует отметить одну вещь: на этот раз мы решили реализовать Linearlayoutmanager с горизонтальной компоновкой. К счастью, он автоматически настраивается на прокрутку, если элементов много. Но если вы хотите реализовать другие стили, вы можете сделать это здесь, создав различные Менеджер компоновки с выбранным вами размером.

Резюме

Мы рассмотрели, как использовать RecyclerView с пользовательским RecyclerView. Адаптер и Менеджер компоновки . Это один из лучших подходов для эффективного отображения списка элементов. Я нашел это весьма полезным, и на самом деле он может предложить больше, например анимацию предметов. (Я напишу об этом, когда буду знать это лучше!)

Пожалуйста, не стесняйтесь оставлять комментарии, и ваши комментарии более чем приветствуются и ценятся! Спасибо за чтение 😄

Оригинал: “https://dev.to/tomokawaguchi/how-to-make-a-horizontal-layout-list-with-recyclerview-3bkc”