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

16 1 scaled - Android [Kotlin] для начинающих

Смотрите видеоурок бесплатно на удобной для вас платформе:

Передача данных через 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. В конце все остается то же самое. Вызывается старт Активити с интентом в качестве параметра.
val bundle = Bundle()
bundle.putString("EXTRA_KEY_TEXT", "don't panic")
bundle.putInt("EXTRA_KEY_NUMBER", 42)
bundle.putSerializable("EXTRA_KEY_WORD", word)
intent.putExtras(bundle)

startActivity(intent)

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

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

intent.putExtras(
    bundleOf(
        "EXTRA_KEY_TEXT" to "don't panic",
        "EXTRA_KEY_NUMBER" to 42,
        "EXTRA_KEY_WORD" to word,
    )
)

startActivity(intent)

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

val intent = Intent(this, SecondDemoActivity::class.java).apply {
    putExtra("EXTRA_KEY_TEXT", "don't panic")
    putExtra("EXTRA_KEY_NUMBER", 42)
    putExtra("EXTRA_KEY_WORD", word)
}

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

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

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

val bundle = intent.extras
val text = bundle?.getString("EXTRA_KEY_TEXT")
val number = bundle?.getInt("EXTRA_KEY_NUMBER")
val word = bundle?.getParcelable("EXTRA_KEY_WORD", ExtraWord::class.java)

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

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

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

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

Для тех, кто собрался стать Android-разработчиком

Пошаговаясхема
Пошаговая
схема

Описание процесса обучения от основ Kotlin до Android-разработчика

Бесплатныеуроки
Бесплатные
уроки

Авторский бесплатный курс по основам языка программирования Kotlin

Обучающийбот
Обучающий
бот

Тренажер и самоучитель по Котлин – бесплатные тесты и практика

Поделиться уроком

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *