Добавить в корзинуПозвонить
Найти в Дзене

Урок 16: Bundle – передача объектов между компонентами | Курс Android на Kotlin c нуля

Смотреть на обучающей платформе с ИИ: https://androidsprint.ru/courses/osnovy-android-xml Смотреть в VK:
https://vkvideo.ru/playlist/-85562117_2/video-85562117_456239106 Смотреть на YouTube:
https://www.youtube.com/watch?v=tzTIUx6Gx04 Великолепно! Мы только что узнали, как использовать Serializable и Parcelable для передачи объектов между Activity. Также мы уже знаем, что под капотом методов putExtra объекты упаковываются в класс Bundle. А еще я говорил, что мы можем создавать такие объекты самостоятельно напрямую. Настало время поговорить подробнее про этот мощный инструмент. В Android Bundle — это универсальный контейнер для передачи данных между компонентами, такими как Activity, Fragment, Service и так далее. Почему мы должны уделить внимание Bundle, если уже знаем о Parcelable и Serializable? Ну, дело в том, что Bundle — это не просто альтернатива, а скорее незаменимый элемент экосистемы Android, который предлагает дополнительные возможности и преимущества. Многие системные функц
Оглавление
Смотреть на обучающей платформе с ИИ: https://androidsprint.ru/courses/osnovy-android-xml
Смотреть в VK:
https://vkvideo.ru/playlist/-85562117_2/video-85562117_456239106
Смотреть на YouTube:
https://www.youtube.com/watch?v=tzTIUx6Gx04

Передача данных через Bundle объект

Великолепно! Мы только что узнали, как использовать Serializable и Parcelable для передачи объектов между Activity. Также мы уже знаем, что под капотом методов putExtra объекты упаковываются в класс Bundle. А еще я говорил, что мы можем создавать такие объекты самостоятельно напрямую. Настало время поговорить подробнее про этот мощный инструмент.

В Android Bundle — это универсальный контейнер для передачи данных между компонентами, такими как Activity, Fragment, Service и так далее.

Почему мы должны уделить внимание Bundle, если уже знаем о Parcelable и Serializable? Ну, дело в том, что Bundle — это не просто альтернатива, а скорее незаменимый элемент экосистемы Android, который предлагает дополнительные возможности и преимущества. Многие системные функции и методы Android требуют именно Bundle для передачи данных.

Вы часто будете работать с Bundle при взаимодействии с фрагментами или при сохранении и восстановлении состояния экранов. Этих примеров мы коснемся, когда будем изучать фрагменты. Сейчас только ограничимся демонстрацией создания наборов бандлов и передачи их между нашими экранами.

Как создать и передать Bundle объект

Приступим к созданию Bundle. Как это работает.

  1. Создаем сам объект val bundle = Bundle().
  2. Добавляем в него произвольный набор данных по отдельности. Для каждого типа данных используется отдельный метод. Я буду отправлять те же данные, поэтому методы будут putString, putInt, putSerializable, а также может быть putParcelable соответственно.
  3. Далее обращаюсь к переменной интента и вызываю метод putExtras. Обращаю внимание на s в конце – это другой метод, он принимает один параметр Bundle.
  4. В конце все остается то же самое. Вызывается старт Активити с интентом в качестве параметра.
-2

Бандл вообще актуально использовать как раз, когда данных много и они разные. И для этих случаев есть короткая запись создания набора этих объектов. Для этого я не буду все создавать по отдельности, а внутри putExtras вместо объекта вызову метод bundleOf(). В него передам те же пары ключ-значение, но в более компактной форме.

Для пары в Котлин существует соответствующий тип Pair. В сигнатуре видно, что первый тип строка – это ключ. Второй тип – любой тип передаваемых данных. Записываются они через ключевое слово to.

-3

Кстати, выше вызов putExtra можно тоже подсократить с помощью scope-функции apply. Таким образом методы будут применяться сразу к созданному объекту интента и сохранятся в переменную intent.

-4

Как получить Bundle объект в Activity

Окей. Получить Bundle в другой Activity очень просто. Технически, чтобы получить сами значения вообще ничего делать ненадо. Помним, что методы экстра под капотом уже работают с Bundle. Поэтому все способы получения Extra у проперти intent остаются рабочими.

Если вы передаете много данных и хотите работать с ними централизованно, может быть удобнее получить весь Bundle и извлекать значения из него. Например, вот так:

-5

Здесь я сначала извлекаю объект бандла, а затем достаю нужные мне значения в зависимости от типа. Как вы понимаете все по большей части идентично.

Отлично. Сейчас мы научились правильно передавать объекты между Activity. На самом деле Bundle мы будем чаще использовать при взаимодействии с фрагментами, а также при сохранении и восстановлении состояния экранов. Поговорим об этом подробнее в соответствующих уроках.

И это конец. Ну а закрепить теорию по этому уроку вы можете с помощью бесплатных тестов в телеграм боте по ссылке под видео. Бот, который посвящен только материалам по Android, заходите, посмотрите.

В следующем уроке погрузимся в важнейшую тему из области компонента Activity – жизненный цикл.

Дополнительные материалы

🔹 Обучающая платформа с ИИ: https://androidsprint.ru

🔹 Интерактивный курс Kotlin Практикум: https://androidsprint.ru/kotlin-praktikum

🔹 Код из всех уроков в телеграм канале: https://t.me/ievetrov

🔹 Сообщество в VK: https://vk.com/ivan.ievetrov