Практическая работа по 4 спринту курса "Андроид разработка" в Яндекс Практикум.
Работа призвана помочь в освоении следующих важных тем при изучении Java:
- Анонимные классы
- Лямбда выражения
- Дженерики
Приложение состоит из одного экрана с 3 табами. В каждом из табов расположен список из элементов определенного типа: текст, картинка, цвет. В качестве задания предлагается реализовать следующий функционал:
- При нажатии на кнопку происходит показ сообщения "Отсортировано!", а при удержании - "Перетасовано!".
- При нажатии на элемент текста происходит показ сообщения с нажатым текстом.
- При нажатии на кнопку происходит сортировка элементов, при удержании - тасовка.
Для повторения темы создания анонимных классов рассмотрим установку обработчиков нажатия на кнопку. Работать будем в классе MainActivity в методе setButtonListener.
Наш обработчик должен соответствовать следующим правилам:
- Нажатие на кнопку вызывает сортировку у списка. За сортировку отвечает метод
sort() - Удержаение кнопки вызывает перетасовку элементов списка. За перетасовку отвечает метод
shuffle()
Реализация сортировки и перетасовки будет сделана позже. На текущий момент методы sort() и shuffle() будут просто показывать соответствующее сообщение. Для установки слушателей мы воспользуемся классом ClickListenersUtils и его статическим методом setListeners. На вход метод принимает элемент button, на который мы хотим повесить обработчик и объект, реализующий интерфейс OnClickListener.
Интерфейс OnClickListener описывает два метода:
onClick- который вызывается при нажатии на кнопкуonLongClick- который вызывается при удержании кнпоки
Нам предлагается в методе setButtonListener создать объект анонимного класса, реализующего интерфейс OnClickListener и передать его и кнопку button в статический метод setListeners класса ClickListenersUtils.
Для изучения синтаксиса лямбда-выражений предлагается реализовать реакцию на нажатие элемента с текстом. Работать мы будем в классе TextViewHolder, который находится в файле ListTextAdapter. Нам необходимо в методе setClickListener передать слушатель нажатия на itemView. Передавать слушатель будем через лямбда-выражение, реализующее интерфейс View.OnClickListener. Для передачи слушателя используется метод setOnClickListener.
Для начала нам стоит реализовать перетасовку элементов. В классе ListShuffler в методе shuffle необходимо реализовать логику случайной перестановки элементов списка. Мы можем написать свою реализацию или воспользоваться существующей из java.util - Collections.shuffle.
Для изучения возможностей дженериков предлагается реализовать сортировку в классе ListSorter, методе sort. Чтобы сохранить инкапсуляцию внутренней логики каждого их типов элементов и сохранить масштабируемость программы, мы обощим сортировку для разного типа данных.
Для этого нам нужно:
- Создать общий интерфейс, который описывает один метод - метод сравнивающий два элемента одного типа.
- Каждый из типов элементов -
TextItem,ImageItemиColorItemреализуют интерфейс и опишут логику сравнения двух элементов. - В классе
ListSorterметодsortбудет принимать список элементов с типом, реализующим созданный интерфейс. Теперь мы можем описать логику сортировки для универсального типа данных основывая на логике сравнения элементов, которую предоставляет созданный интерфейс.
Подсказка: для упрощения реализации сортировки предлагается использовать готовое решение из List.sort с передачей реализации интерфейса Comparable. Это не обязательно, мы можем реализовать сортировку и самостоятельно.
Финальная версия с реализацией задания лежит в ветке final.