Страницы

Поиск по вопросам

суббота, 30 ноября 2019 г.

Класс Bundle зачем он?

#java #android #android_bundle


PageFragment fragment = new PageFragment();
Bundle args=new Bundle();
args.putInt("num", page);
fragment.setArguments(args);
return fragment;


Вопрос: Зачем Bundle нужен? чтобы создать связку ключ-значение? или у него есть еще
функции?
    


Ответы

Ответ 1



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

Ответ 2



Класс Bundle (с английского - сверток) по сути представляет собой враппер (оболочку) над коллекцией ArrayMap для создания более комфортного в работе контейнера для элементов разных типов, в котором можно разместить любые Parcelabe-объекты и примитивные типы. Класс является потокобезопасным и может использоваться для передачи значений между разными потоками. Доступ к элементам этой коллекции осуществляется, как и в ArrayMap, по парам ключ-значение. Дополнительно класс предоставляет методы по размещению и извлечению типизированных данных и некоторые другие возможности. Класс широко используется для группировки в одну сущность разнотиповых данных (как например строки, простые числа, булевы значения и др.) для последующей передачи как между отдельными методами одного объекта, так и разными объектами и даже разными компонентами одного приложения в основном в случаях, когда типы передаваемых данных заранее не известны - то есть мы можем передат строку, а можем и число или чт то другое в каждом отдельном случае (в остальных случаях удобнее использовать передачу через конструктор или отдельные аргументы метода). Так же такой контейнер удобно использовать для передачи результата работы метода, когда нужно вернуть несколько значений разного типа, а создавать POJO-модель нет особого смысла. Класс широко используется системой, в том числе и для хранения значений при смене состояния, но сам класс не предоставляет функционал такого сохранения, он лишь оболчка для группировки данных в работе других механизмов.

Ответ 3



Класс bundle служит для передачи данных простых типов (boolean byteshort int long char float double) между активити. Передача осуществляется через различные механизмы(1. Просто ключ-значение 2. Интерфейс Parcelable 3. механизм Serizilable 4. библиотека GSON От гугла.) Не пробуйте передать через bundle ссылку на объект или указатель на объект. Он только для простых типов. Если кому интересен пример передачи данных может посмотреть мой простой пример-эксперимент по передаче данных через bundle на гитхабе. https://github.com/aleontsev/TrasferingDataBetweenActivitiesParcelableSerizilableBundleandCrashalyticsSentry

Комментариев нет:

Отправить комментарий