Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Практическая работа по 4 спринту курса "Андроид разработка" в Яндекс Практикум.

Notifications You must be signed in to change notification settings

tinatrk/PracticumSort

Repository files navigation

PracticumSort

Практическая работа по 4 спринту курса "Андроид разработка" в Яндекс Практикум.

Работа призвана помочь в освоении следующих важных тем при изучении Java:

  • Анонимные классы
  • Лямбда выражения
  • Дженерики

Задание

Приложение состоит из одного экрана с 3 табами. В каждом из табов расположен список из элементов определенного типа: текст, картинка, цвет. В качестве задания предлагается реализовать следующий функционал:

  1. При нажатии на кнопку происходит показ сообщения "Отсортировано!", а при удержании - "Перетасовано!".
  2. При нажатии на элемент текста происходит показ сообщения с нажатым текстом.
  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. Чтобы сохранить инкапсуляцию внутренней логики каждого их типов элементов и сохранить масштабируемость программы, мы обощим сортировку для разного типа данных. Для этого нам нужно:

  1. Создать общий интерфейс, который описывает один метод - метод сравнивающий два элемента одного типа.
  2. Каждый из типов элементов - TextItem, ImageItem и ColorItem реализуют интерфейс и опишут логику сравнения двух элементов.
  3. В классе ListSorter метод sort будет принимать список элементов с типом, реализующим созданный интерфейс. Теперь мы можем описать логику сортировки для универсального типа данных основывая на логике сравнения элементов, которую предоставляет созданный интерфейс.

Подсказка: для упрощения реализации сортировки предлагается использовать готовое решение из List.sort с передачей реализации интерфейса Comparable. Это не обязательно, мы можем реализовать сортировку и самостоятельно.

Финальная версия с реализацией задания лежит в ветке final.

About

Практическая работа по 4 спринту курса "Андроид разработка" в Яндекс Практикум.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%

AltStyle によって変換されたページ (->オリジナル) /