Официальная документация Android предоставила учебник по созданию RecyclerView в Activity. Однако при попытке создать RecyclerView во фрагменте это немного отличается.
Шаг 1. Создайте проект базовой деятельности
Откройте Android Studio, создайте новый проект - ›выберите Основные действия -› Завершить создание приложения. Запустив приложение на эмуляторе, вы увидите одно приложение-действие с кнопкой, которая позволяет переключаться между двумя фрагментами.
Шаг 2. Создайте ресурс RecyclerView
Мы собираемся создать ресурс RecyclerView в SecondFragment. Перейдите в /res/layout/fragment_second.xml, добавьте следующие строки для создания RecyclerView:
<androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerview" android:layout_width="409dp" android:layout_height="460dp" android:layout_marginStart="1dp" android:layout_marginTop="1dp" android:layout_marginEnd="1dp" android:layout_marginBottom="1dp" android:visibility="visible" app:layout_constraintBottom_toTopOf="@+id/button_second" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" />
В качестве альтернативы мы также можем использовать Palette в Android Studio для создания RecyclerView:
- Перетащите RecyclerView из палитры в макет в файле fragment_second.xml (используя представление «Дизайн»).
- Определите идентификатор RecyclerView как `recyclerview`.
- Поскольку он создается в ConstraintLayout, определите Виджет ограничения в 4 направлениях в разделе Макет.
Шаг 3. Создайте FrameLayout с помощью TextView
После создания RecyclerView нам нужно определить ресурс для каждого элемента (TextView) в RecyclerView. Создайте новый файл в папке / res / layout /: frame_textview.xml:
Скопируйте следующие строки в этот новый файл.
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="8dp"> <TextView android:id="@+id/randomText" android:layout_width="wrap_content" android:layout_height="wrap_content" tools:text="This is some temp text" /> </FrameLayout>
В качестве альтернативы вы также можете использовать Palette для создания TextView
- Перетащите TextView из палитры в макет в frame_textview.xml (используя представление «Дизайн»).
- Определите идентификатор TextView как `randomText`
Шаг 4. Добавьте RecyclerView во фрагмент
В разделе recyclerview / SecondFragment.java добавьте следующие строки, чтобы вставить recyclerView во фрагмент. Обратите внимание, что ReyclerView необходимо получать напрямую с помощью view.findViewById () вместо findViewById (). view можно получить из inflater.inflate ().
public class SecondFragment extends Fragment { // Add RecyclerView member private RecyclerView recyclerView; @Override public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState ) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_second, container, false); // Add the following lines to create RecyclerView recyclerView = view.findViewById(R.id.recyclerview); recyclerView.setHasFixedSize(true); recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext())); recyclerView.setAdapter(new RandomNumListAdapter(1234)); return view; }
Шаг 5: Создайте ViewHolder Recycler
В разделе recyclerview / создайте RecyclerViewHolder.java, добавьте следующие строки, чтобы определить, как создать ViewHolder. Один ViewHolder содержит необходимую информацию пользовательского интерфейса об одном элементе в RecyclerView. В этом примере itemView - это компонент FrameLayout из шага # 3. Нам нужно получить и сохранить TextView randomText из FrameLayout .
package com.google.firebase.recyclerview; import android.view.View; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; public class RecyclerViewHolder extends RecyclerView.ViewHolder { private TextView view; public RecyclerViewHolder(@NonNull View itemView) { super(itemView); view = itemView.findViewById(R.id.randomText); } public TextView getView(){ return view; } }
Шаг 6. Создайте RandomNumListAdapter
В разделе recyclerview / создайте RandomNumListAdapter.java, добавьте следующие строки, чтобы определить, как передавать данные в RecyclerView.
Здесь мы хотим показать список случайных чисел в RecyclerView, поэтому мы берем начальное значение случайности в качестве параметра в конструкторе.
В getItemViewType () мы предоставим файл макета, который содержит TextView для элемента списка. В этом примере это frame_textview из шага № 3 .
В onCreateViewHolder () мы берем viewType, который возвращается getItemViewType (). После расширения FrameLayout для получения объекта View мы можем использовать RecyclerViewHolder , созданный на шаге № 5 для возвращаемого значения.
В onBindViewHolder () мы привяжем RecyclerViewHolder к RecyclerView. В этом примере мы сгенерируем случайное число во время выполнения для этого элемента представления. Обратите внимание, что случайное число будет генерироваться каждый раз, когда ViewHolder привязывается к RecyclerView, поэтому мы можем неявно знать, что, если элемент отвязан, и снова привязывается в той же позиции.
package com.google.firebase.recyclerview; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import java.util.Random; public class RandomNumListAdapter extends RecyclerView.Adapter<RecyclerViewHolder> { private Random random; public RandomNumListAdapter(int seed) { this.random = new Random(seed); } @Override public int getItemViewType(final int position) { return R.layout.frame_textview; } @NonNull @Override public RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(viewType, parent, false); return new RecyclerViewHolder(view); } @Override public void onBindViewHolder(@NonNull RecyclerViewHolder holder, int position) { holder.getView().setText(String.valueOf(random.nextInt())); } @Override public int getItemCount() { return 100; } }
Результат: RecyclerView со списком случайных чисел
Теперь все изменения кода выполнены, снова запустите приложение и нажмите кнопку ДАЛЕЕ на эмуляторе. Если вы видите список случайных чисел, как показано ниже, поздравляем! В этом фрагменте вы создали RecyclerView!
Если вы прокрутите RecyclerView вниз, вы увидите больше случайных чисел. И если вы прокрутите вверх, вы обнаружите, что числа отличаются от числа на той же позиции ранее. Это связано с тем, что элемент просмотра за пределами экрана будет автоматически переработан и привязан как другой элемент просмотра, находящийся в данный момент на экране. Каждый раз, когда элемент привязывается к RecyclerView, это приложение генерирует новое случайное число и устанавливает значение TextView.