ТРАНЗАКЦІЇ фрагменті – програмування Android

&nbsp

Крім застосування тегірованія, новий код також стосується транзакцій фрагментів Ще раз доповнимо програму, щоб продемонструвати цінність таких транзакцій

Перш ніж братися за транзакції, необхідно зробити невеликий відступ Раніше ми відзначали, що в документації з розробки для Android рекомендується, щоб підкласи фрагмента не мали явних конструкторів Отже, як же зовнішній обєкт передає стан ініціалізації новому фрагменту Клас Fragment підтримує два методи, setArguments і getArguments, що забезпечують таку можливість Відповідно вони дозволяють зовнішнім зухвалому елементу – ним може бути творець фрагмента – зберігати пакет (Bundle) у фрагменті, а фрагменту – відновлювати цей пакет небудь пізніше

Така тонка комбінація нового екземпляра фрагмента, пакета Bundle і виклику до setArguments працює в чому так само, як і конструктор Тому доцільно обєднувати ці елементи в статичний фабричний метод, що відноситься до обєкту Fragment, ось так:

Тепер цей статичний фабричний метод можна використовувати у методі onCreate класу SimpleFragment для створення нового екземпляра фрагмента, який буде коректно инициализирован переданим пакетом Bundl е Даний код практично ідентичний попередній версії, за винятком того, що тепер використовується статичний фабричний метод, що відноситься до DateTime, і йому передається аргумент:

Нарешті, що відноситься до фрагмента метод onCreate отримує дані для ініціалізації з пакету, переданого як аргумент, якщо тільки мова не йде про стан з попередньої інкарнації методу:

Додаток, модифіковане до такої міри, все ще працює так само, як і вихідний варіант Але реалізація значно змінилася і стала набагато більш гнучкою Зокрема, у нас є фрагмент, який можна ініціалізувати ззовні і використовувати для демонстрації транзакцій

Ідея транзакції фрагмента, як випливає з назви, полягає в тому, що всі зміни відбуваються в результаті одиничного, «атомарного» дії Щоб це продемонструвати, востаннє доповнимо нашу програму-приклад: додамо можливість створювати фрагменти в парах

Ось новий макет:

Ось відповідні доповнення до методу onCreate в Simpl eFragment:

Нарешті, змінюється і наше додаток-приклад Тепер при запуску воно виглядає як на рис 82

Рис 82 Транзакції фрагмента

Обидва фрагмента відображають одні й ті ж дату і час, так як обом фрагментами повідомляється однакове значення Тепер можна перериватися на роботу з іншими додатками, а потім повертатися до нашої програми-прикладу, можна повертати дисплей – наше демо не втратить стану Програма досить надійна Зробимо реалізацію кнопки:

Цей метод використовує саме атомарность транзакцій фрагмента Він багато в чому нагадує код ініціалізації фрагмента з методу onCreate, що відноситься до Simpl eFragment Але замість того, щоб використовувати транзакції для додавання нових екземплярів фрагмента, цей код заміщає існуючі фрагменти Виклик commi t наприкінці методу призводить до того, що обидва нових фрагмента стають видимі одночасно Час в блакитному і зеленому полі завжди буде йти синхронно

Отже, ми підходимо до останньої важливою складовою фрагмента – стеку переходів назад (back stack) Якщо послідовно запустити кілька активностей, то до них можна буде повернутися в зворотному порядку, скориставшись кнопкою «Назад» Така поведінка властива і для транзакцій фрагмента

Запустивши цей додаток, ви побачите на екрані картинку, як на рис 82 Якщо натиснути кнопку, розташовану у верхній частині екрану, то блакитний і зелений фрагменти одночасно оновляться Але ще краще, якщо ви натиснете кнопку «Назад» (значок зі стрілкою, що вказує ліворуч, в нижньому лівому кутку дисплея), – ви побачите в зворотному порядку всі оновлення, які зробили, натискаючи кнопку «Пуск» Наприклад, якщо в обох фрагментах відображається час 5 Apr 2011 12:49:32, а ви натискаєте кнопку «Пуск», то дисплей може оновитися так, що в обох фрагментах – блакитному і зеленому – будуть показані дата і час 5 Apr 2011 13:02:43 Якщо після цього натиснути кнопку «Назад», то в обох фрагментах знову буде показано час 5 Apr 2011 12:49:32 Ціла транзакція – оновлення обох фрагментів – записується в стек переходів назад як єдине подія Коли ви натискаєте кнопку «Назад», ціла транзакція видаляється, відкриваючи стан, яке настало в результаті попередньої транзакції

Джерело: Android Програмування на Java для нового покоління мобільних пристроїв

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*