Android Studio: Сортировка товаров по категориям (Урок 7)

Реализуем сортировку товаров по категориям на одной странице без перезагрузки.

Добавление поля категории в модель

Добавим поле категории в модель курса. В модели курс создадим поле типа integer, например, category. Добавим в конструктор параметр для этого поля, а также геттер и сеттер.

Указание категорий

Укажем категорию для каждого курса. Используем следующие категории:

  1. Игры
  2. Веб-сайты
  3. Языки программирования
  4. Прочее

Присвоим каждой категории числовой идентификатор: Игры – 1, Веб-сайты – 2, Языки – 3, Прочее – 4. В коде, создающем курсы, укажем соответствующую категорию. Примеры:

  • Java и Kotlin (Языки программирования) — категория 3
  • Unity (Игры) — категория 1
  • Остальные курсы (Веб-разработка) — категория 2

Обработка нажатия на категорию

В адаптере RecyclerView, в методе onBindViewHolder, добавим обработчик клика (OnClickListener) для каждой категории. В обработчике вызовем метод showCoursesByCategory из MainActivity, передав идентификатор выбранной категории.

Метод showCoursesByCategory

Создадим публичный статический метод showCoursesByCategory в MainActivity, принимающий идентификатор категории (Integer category). Этот метод будет отображать только курсы, соответствующие переданной категории. Для доступа к RecyclerView.Adapter и списку курсов (courseList) из статического метода, они объявлены как статические объекты. Это обеспечивает сохранение данных между вызовами метода.

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

В showCoursesByCategory создадим список filteredCourses для хранения отфильтрованных курсов. Переберем courseList и добавим в filteredCourses курсы с совпадающей категорией. После фильтрации очистим courseList, добавим в него filteredCourses и вызовем notifyDataSetChanged() в адаптере.

Список исходных данных

Для корректной работы при повторном выборе категорий, создадим статический список fullCoursesList, в который добавим все курсы при создании Activity. В showCoursesByCategory перед фильтрацией очистим courseList и заполним его данными из fullCoursesList.

Тестирование

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

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

Что будем искать? Например,программа