Як вибрати Бандл для передачі контенту

3-22-2020

Механізм передачі даних в Fragment схожий на аналогічних механізм Activity, хіба що називається воно Arguments, а не Extras. Є й ще одна відмінність: оскільки ми створюємо Fragment безпосередньо, а не використовуючи механізм Intent, як у випадку з Activity, безпосередня установка аргументів виглядає дещо інакше. В нашому випадку нам потрібно передати колір (int). Також хочемо вам порекомендувати Презентации и обмен контентом 

У разі, якщо передача аргументів не потрібно, цей метод буде складатися лише з одного рядка — повертати новий інстантон фрагмента.
Параметр view — кореневої View у фрагменті, тобто той, що ми повернули з методу onCreateView().
Не забудьте додати Activity в маніфест. Додамо поле для визначення типу пристрою, і будемо отримувати тип в onCreate().
Як бачите, ми додаємо фрагмент, якщо його ще немає, і замінюємо на новий, якщо він є. Зрозуміти, чи є фрагмент можна використовуючи пошук по тегу, який ми задаємо при додаванні або заміні. Ви також могли звернути увагу на метод addToBackStack(). Якщо ми викликаємо цей метод для транзакції, то вона додається в так званий Back Stack, історію переходів. Якщо користувач після цього натисне на кнопку назад, він повернеться до попередньої операції. Спробуйте вибрати різні кольори, а потім натиснути на кнопку назад. Є, щоправда, один нюанс: при поверненні назад не змінюються радіокнопки. Найпростішим способом додати OnBackStackChangedListener, який дозволяє прослідковувати зміну Back Stack — він спрацює при додаванні/ заміну фрагментів і при переході тому.
У SelectionFragment створюємо поле, яке буде зберігати набір пар “колір” – “id RadioButton”. З допомогою цього поля ми зможемо легко знайти потрібний RadioButton за кольором. У DetailFragment створюємо поле, в якому зберігаємо поточний колір. При спрацьовуванні OnBackStackChangedListener отримуємо поточний колір DetailFragment і передаємо його в SelectionFragment, який, виходячи з кольору відзначить необхідну кнопку.
Відрізняється тим, що в якості ключів виступають примітивні типи (наприклад, int, як в нашому випадку), а не об’єкти. Така реалізація вимагає менше пам’яті, але трохи повільніше працює .