Реализуем сортировку товаров по категориям на одной странице без перезагрузки.
Добавление поля категории в модель
Добавим поле категории в модель курса. В модели курс создадим поле типа integer, например, category. Добавим в конструктор параметр для этого поля, а также геттер и сеттер.
Указание категорий
Укажем категорию для каждого курса. Используем следующие категории:
- Игры
- Веб-сайты
- Языки программирования
- Прочее
Присвоим каждой категории числовой идентификатор: Игры – 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.
Реализован функционал сортировки товаров по категориям без перезагрузки страницы. Приложение отображает только курсы, соответствующие выбранной категории. Можно добавить кнопку для отображения всех курсов.