SlideShare a Scribd company logo
1 of 18
Download to read offline
Fragments
Android
Дмитрий Колесников
О чём речь?
Fragment представляет часть пользовательского интерфейса.
Всегда привязан к Activity.
Имеет собственный lifecycle, привязанный к Activity. Подробнее
Плюсы:
Позволяет реализовать гибкий интерфейс.
Облегчает поддержку разных экранов.
Декомпозиция и упрощение логики.
Пример использования.
Основные классы.
API 4+ via SupportLibrary
android.support.v4.app.FragmentActivity
android.support.v7.app.ActionBarActivity
android.support.v7.app.AppCompatActivity
android.support.v4.app.Fragment
android.support.v4.app.FragmentManager
android.support.v4.app.FragmentTransaction
API 11+
android.app.Fragment
android.app.FragmentManager
android.app.FragmentTransaction
Жизненный цикл
Жизненный цикл
onAttach(Activity)
Вызывается, когда фрагмент привязывается к Activity. С этого момента можно
использовать getActivity()
onCreate(Bundle)
Вызывается, когда система создает фрагмент.
onCreateView(LayoutIn ater, ViewGroup, Bundle)
Вызывается, когда фрагмент привязывается к иерархии View.
onActivityCreated(Bundle)
Вызывается, когда завершается onCreate() у Activity.
onStart(); onResume(); onPause(); onStop()
Аналогичные методы Activity.
onDestroyView()
Когда иерархия View разбирается.
onDestroy()
Вызывается, когда система разрушает фрагмент.
onDetach()
фрагмент больше не ассоциируется с Activity. С этого момента getActivity() возвращает null
Базовая реализация.
onCreate(Bundle)
Инициализируем все ресурсы, связанные с фрагментом, кроме UI.
onCreateView(LayoutIn ater, ViewGroup, Bundle)
Создаем и возвращаем View фрагмента.
onViewCreated(View, Bundle)
Инициализируем UI, устанавливаем adapter или другие данные.
onResume()
Инициализируем “дорогие” ресурсы: GPS, анимация, постоянное использование сети тд.
onPause()
Освобождаем “дорогие” ресурсы, сохраняем состояние.
onDestroyView()
Зануляем все ссылки на все View если мы их сохраняли.
Статичные фрагменты.
1 <?xml version="1.0" encoding="utf-8"?>
2 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent">
5
6 <fragment class="com.example.android.apis.app.TitlesFragment"
7 android:id="@+id/titles"
8 android:layout_width="match_parent"
9 android:layout_height="match_parent" />
10
11 </FrameLayout>
Нельзя убрать.
Нельзя передавать аргументы.
Обязательно должен быть задан id или tag.
Динамические фрагменты.
Добавляются в Runtime с помощью FragmentTransaction
1 FragmentTransaction transaction = getFragmentManager()
2 .beginTransaction();
3 transaction.add(R.id.frame, new Fragment());
4 transaction.commit();
getFragmentManager() (или getSupportFragmentManager() в случае использования Support
library)
Вызывается в Activity, возвращает FragmentManager
FragmentManager.beginTransaction()
Создаем транзакцию.
commit(), commitAllowingStateLoss()
выполняем транзакцию.
FragmentManager.executePendingTransactions()
Убеждаемся что все транзакции завершены.
Состояние сохраняется.
Операции с фрагментами.
fragmentManager. ndFragmentById(int)
fragmentManager. ndFragmentByTag(String)
transaction.add(int, Fragment, String)
transaction.remove(Fragment)
transaction.replace(int, Fragment, String)
transaction.hide(Fragment)
transaction.show(Fragment)
transaction.detach(Fragment) API 13
transaction.attach(Fragment) API 13
С фрагментами задекларированными в layout почти ничего делать нельзя.
Backstack
FragmentTransaction.addToBackStack(String)
FragmentManager.popBackStack()
FragmentManager.getBackStackEntryCount()
FragmentManager.getBackStackEntryAt(int)
По возвращению из стека onCreateView(), onActivityCreated(), onStart(), and onResume()
Сохранение состояния
Нельзя хранить ссылки на элементы layout.
Сохраняется в onSaveInstanceState(Bundle)
Восстанавливается если savedState не null в onCreate(), onCreateView(), onViewCreated(), и
onActivityCreated(). (с API 17 onViewStateRestored())
Можно переиспользовать: setRetainInstance(true).
Activity - Fragment, Fragment - Fragment.
getFragmentManager(). ndFragmentById(int)
getFragmentManager(). ndFragmentByTag(String)
Fragment.getActivity()
Interfaces.
Fragment.setTargetFragment(Fragment, int), Fragment.getTargetFragment().
Events: EventBus, Intents/LocalBroadcastReceiver
Наследники
DialogFragment
ListFragment
PreferenceFragment нет в SupportLibrary
WebViewFragment нет в SupportLibrary
MapFragment из Google Services
ViewPager + FragmentPagerAdapter
Вложенные фрагменты API 17
Fragment.getChildFragmentManager()
Fragment.getParentFragment()
Состояние сохраняется.
Жизненный цикл onCreateView() onDestroyView()
Не умеет в Backstack.
Нельзя использовать setRetainInstance(boolean)
Проблемы с анимацией.
Да и вообще не очень...
Подробнее
Делайте правильно, а не правильно - не делайте.
Хорошо:
newInstance(...)
setArguments()
Все диалоги – фрагменты
Хорошее разделение по смыслу: один фрагмент – одна задача.
Сохранять состояние.
Утилитные классы для избежания копипасты.
Делайте правильно, а не правильно - не делайте.
Плохо, иногда очень:
Отсутствие пустого конструктора.
Забытые ссылки на элементы layout.
Забытые вложенные анонимные классы, асинхронные задачи и тд.
Вложенные фрагменты пересоздаются, даже если состояние родительского
восстанавливается.
Ссылки
API Guides
Google Fragment Training
Fragment
FragmentTransaction
FragmentManager
FragmentPagerAdapter

More Related Content

What's hot

Git (presentation)
Git (presentation)Git (presentation)
Git (presentation)Anton Ivanov
 
Лекция Android. Fragments, ActionBar, Drawer
Лекция Android. Fragments, ActionBar, DrawerЛекция Android. Fragments, ActionBar, Drawer
Лекция Android. Fragments, ActionBar, DrawerАлександр Брич
 
AndroidMVPHelper
AndroidMVPHelperAndroidMVPHelper
AndroidMVPHelperDataArt
 
Как написать XAML-приложение без Message Bus
Как написать XAML-приложение без Message Bus Как написать XAML-приложение без Message Bus
Как написать XAML-приложение без Message Bus Denis Tsvettsih
 
Ubuntu+python+selenium=легкий старт
Ubuntu+python+selenium=легкий стартUbuntu+python+selenium=легкий старт
Ubuntu+python+selenium=легкий стартAndrey Matukhno
 
Релиз PHP7 - что нас ждет в октябре 2015
Релиз PHP7 - что нас ждет в октябре 2015Релиз PHP7 - что нас ждет в октябре 2015
Релиз PHP7 - что нас ждет в октябре 2015Andrey Tokarchuk
 
Лекция Android. Хранение данных
Лекция Android. Хранение данныхЛекция Android. Хранение данных
Лекция Android. Хранение данныхАлександр Брич
 

What's hot (8)

Git (presentation)
Git (presentation)Git (presentation)
Git (presentation)
 
Лекция Android. Fragments, ActionBar, Drawer
Лекция Android. Fragments, ActionBar, DrawerЛекция Android. Fragments, ActionBar, Drawer
Лекция Android. Fragments, ActionBar, Drawer
 
Лекция 2. Activity.
Лекция 2. Activity.Лекция 2. Activity.
Лекция 2. Activity.
 
AndroidMVPHelper
AndroidMVPHelperAndroidMVPHelper
AndroidMVPHelper
 
Как написать XAML-приложение без Message Bus
Как написать XAML-приложение без Message Bus Как написать XAML-приложение без Message Bus
Как написать XAML-приложение без Message Bus
 
Ubuntu+python+selenium=легкий старт
Ubuntu+python+selenium=легкий стартUbuntu+python+selenium=легкий старт
Ubuntu+python+selenium=легкий старт
 
Релиз PHP7 - что нас ждет в октябре 2015
Релиз PHP7 - что нас ждет в октябре 2015Релиз PHP7 - что нас ждет в октябре 2015
Релиз PHP7 - что нас ждет в октябре 2015
 
Лекция Android. Хранение данных
Лекция Android. Хранение данныхЛекция Android. Хранение данных
Лекция Android. Хранение данных
 

Viewers also liked

Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Noveo
 
Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Noveo
 
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)Антон Звонов
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)Noveo
 
Webinar: Разработка мобильного приложения для заучивания стихов в Delphi
Webinar: Разработка мобильного приложения для заучивания стихов в DelphiWebinar: Разработка мобильного приложения для заучивания стихов в Delphi
Webinar: Разработка мобильного приложения для заучивания стихов в DelphiDenis Vasilyev
 
Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10
Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10
Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10Denis Vasilyev
 
Android - 10 - Graphics
Android - 10 - GraphicsAndroid - 10 - Graphics
Android - 10 - GraphicsNoveo
 
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Noveo
 
Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Noveo
 
Системы автоматизированной сборки (Lecture 05 – gradle)
Системы автоматизированной сборки (Lecture 05 – gradle)Системы автоматизированной сборки (Lecture 05 – gradle)
Системы автоматизированной сборки (Lecture 05 – gradle)Noveo
 
Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...
Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...
Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...Denis Vasilyev
 
Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Noveo
 
Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)Noveo
 
Webinar: Возможности RAD Studio 10 Seattle для разработки Windows 10 приложений
Webinar: Возможности RAD Studio 10 Seattle для разработки Windows 10 приложенийWebinar: Возможности RAD Studio 10 Seattle для разработки Windows 10 приложений
Webinar: Возможности RAD Studio 10 Seattle для разработки Windows 10 приложенийDenis Vasilyev
 
Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)Noveo
 
Android - 05 - Android basics
Android - 05 - Android basicsAndroid - 05 - Android basics
Android - 05 - Android basicsNoveo
 

Viewers also liked (20)

Lec 13
Lec 13Lec 13
Lec 13
 
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
 
Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)
 
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)
 
Webinar: Разработка мобильного приложения для заучивания стихов в Delphi
Webinar: Разработка мобильного приложения для заучивания стихов в DelphiWebinar: Разработка мобильного приложения для заучивания стихов в Delphi
Webinar: Разработка мобильного приложения для заучивания стихов в Delphi
 
Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10
Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10
Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10
 
Android - 10 - Graphics
Android - 10 - GraphicsAndroid - 10 - Graphics
Android - 10 - Graphics
 
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
 
Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)
 
Системы автоматизированной сборки (Lecture 05 – gradle)
Системы автоматизированной сборки (Lecture 05 – gradle)Системы автоматизированной сборки (Lecture 05 – gradle)
Системы автоматизированной сборки (Lecture 05 – gradle)
 
Lec 12
Lec 12Lec 12
Lec 12
 
Lec 10
Lec 10Lec 10
Lec 10
 
Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...
Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...
Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...
 
Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)
 
Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)
 
Webinar: Возможности RAD Studio 10 Seattle для разработки Windows 10 приложений
Webinar: Возможности RAD Studio 10 Seattle для разработки Windows 10 приложенийWebinar: Возможности RAD Studio 10 Seattle для разработки Windows 10 приложений
Webinar: Возможности RAD Studio 10 Seattle для разработки Windows 10 приложений
 
Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)
 
Thread
ThreadThread
Thread
 
Android - 05 - Android basics
Android - 05 - Android basicsAndroid - 05 - Android basics
Android - 05 - Android basics
 

Similar to Fragments (Lecture 09 – Fragments)

Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Noveo
 
Android осень 2013 лекция 3
Android осень 2013 лекция 3Android осень 2013 лекция 3
Android осень 2013 лекция 3Technopark
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationAndrii Dzynia
 
Android - 11 - Multithreading
Android - 11 - MultithreadingAndroid - 11 - Multithreading
Android - 11 - MultithreadingNoveo
 
Wild Async .NET world: AID Kit for boy-scouts
Wild Async .NET world: AID Kit for boy-scoutsWild Async .NET world: AID Kit for boy-scouts
Wild Async .NET world: AID Kit for boy-scoutsHYS Enterprise
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobileUA Mobile
 
Adn@it'summer - Изоморфные приложения с React и Redux
Adn@it'summer - Изоморфные приложения с React и ReduxAdn@it'summer - Изоморфные приложения с React и Redux
Adn@it'summer - Изоморфные приложения с React и ReduxADN Digital Studio
 
FPUG Dzyga presentation
FPUG Dzyga presentationFPUG Dzyga presentation
FPUG Dzyga presentationIvan Filimonov
 
Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...metaform
 
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...Denis Tsvettsih
 
Android осень 2013 лекция 2
Android осень 2013 лекция 2Android осень 2013 лекция 2
Android осень 2013 лекция 2Technopark
 
Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016
Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016
Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016РИФ-Воронеж
 
Как навести порядок в коде вашего web-приложения, Андрей Чебукин
Как навести порядок в коде вашего web-приложения, Андрей Чебукин Как навести порядок в коде вашего web-приложения, Андрей Чебукин
Как навести порядок в коде вашего web-приложения, Андрей Чебукин Sigma Software
 
МАИ, Сети ЭВМ, Лекция №5
МАИ, Сети ЭВМ, Лекция №5МАИ, Сети ЭВМ, Лекция №5
МАИ, Сети ЭВМ, Лекция №5Dima Dzuba
 
Enterprise flex pure mvc.v4
Enterprise flex pure mvc.v4Enterprise flex pure mvc.v4
Enterprise flex pure mvc.v4Sergiy Shychynov
 
Enterprise flex pure mvc, slides, russian
Enterprise flex pure mvc, slides, russianEnterprise flex pure mvc, slides, russian
Enterprise flex pure mvc, slides, russianSergiy Shychynov
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5Technopark
 

Similar to Fragments (Lecture 09 – Fragments) (20)

Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
 
Android осень 2013 лекция 3
Android осень 2013 лекция 3Android осень 2013 лекция 3
Android осень 2013 лекция 3
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
 
Android - 11 - Multithreading
Android - 11 - MultithreadingAndroid - 11 - Multithreading
Android - 11 - Multithreading
 
Wild Async .NET world: AID Kit for boy-scouts
Wild Async .NET world: AID Kit for boy-scoutsWild Async .NET world: AID Kit for boy-scouts
Wild Async .NET world: AID Kit for boy-scouts
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
 
MWWM
MWWMMWWM
MWWM
 
Adn@it'summer - Изоморфные приложения с React и Redux
Adn@it'summer - Изоморфные приложения с React и ReduxAdn@it'summer - Изоморфные приложения с React и Redux
Adn@it'summer - Изоморфные приложения с React и Redux
 
FPUG Dzyga presentation
FPUG Dzyga presentationFPUG Dzyga presentation
FPUG Dzyga presentation
 
Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...
 
Fragments&Loaders
Fragments&LoadersFragments&Loaders
Fragments&Loaders
 
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
 
Views обзор
Views обзорViews обзор
Views обзор
 
Android осень 2013 лекция 2
Android осень 2013 лекция 2Android осень 2013 лекция 2
Android осень 2013 лекция 2
 
Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016
Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016
Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016
 
Как навести порядок в коде вашего web-приложения, Андрей Чебукин
Как навести порядок в коде вашего web-приложения, Андрей Чебукин Как навести порядок в коде вашего web-приложения, Андрей Чебукин
Как навести порядок в коде вашего web-приложения, Андрей Чебукин
 
МАИ, Сети ЭВМ, Лекция №5
МАИ, Сети ЭВМ, Лекция №5МАИ, Сети ЭВМ, Лекция №5
МАИ, Сети ЭВМ, Лекция №5
 
Enterprise flex pure mvc.v4
Enterprise flex pure mvc.v4Enterprise flex pure mvc.v4
Enterprise flex pure mvc.v4
 
Enterprise flex pure mvc, slides, russian
Enterprise flex pure mvc, slides, russianEnterprise flex pure mvc, slides, russian
Enterprise flex pure mvc, slides, russian
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5
 

More from Noveo

Гуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрииГуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрииNoveo
 
Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)Noveo
 
Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)Noveo
 
Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)Noveo
 
Yii2
Yii2Yii2
Yii2Noveo
 
Сессии и авторизация
Сессии и авторизацияСессии и авторизация
Сессии и авторизацияNoveo
 
Rest
RestRest
RestNoveo
 
PHP basic
PHP basicPHP basic
PHP basicNoveo
 
PHP Advanced
PHP AdvancedPHP Advanced
PHP AdvancedNoveo
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQLNoveo
 
MySQL
MySQLMySQL
MySQLNoveo
 
RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)Noveo
 
Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)Noveo
 
Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)Noveo
 
Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)Noveo
 
XML, JSON (Lecture 11 – XML, JSON)
XML, JSON (Lecture 11 – XML, JSON)XML, JSON (Lecture 11 – XML, JSON)
XML, JSON (Lecture 11 – XML, JSON)Noveo
 
Работа с графической подсистемой (Lecture 10 – Graphics)
Работа с графической подсистемой (Lecture 10 – Graphics)Работа с графической подсистемой (Lecture 10 – Graphics)
Работа с графической подсистемой (Lecture 10 – Graphics)Noveo
 
Введение в Android-разработку (Lecture 06 – basics)
Введение в Android-разработку (Lecture 06 – basics)Введение в Android-разработку (Lecture 06 – basics)
Введение в Android-разработку (Lecture 06 – basics)Noveo
 
Android - 16 - QR
Android - 16 - QRAndroid - 16 - QR
Android - 16 - QRNoveo
 
03 коллекции
03   коллекции03   коллекции
03 коллекцииNoveo
 

More from Noveo (20)

Гуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрииГуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрии
 
Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)
 
Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)
 
Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)
 
Yii2
Yii2Yii2
Yii2
 
Сессии и авторизация
Сессии и авторизацияСессии и авторизация
Сессии и авторизация
 
Rest
RestRest
Rest
 
PHP basic
PHP basicPHP basic
PHP basic
 
PHP Advanced
PHP AdvancedPHP Advanced
PHP Advanced
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQL
 
MySQL
MySQLMySQL
MySQL
 
RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)
 
Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)
 
Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)
 
Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)
 
XML, JSON (Lecture 11 – XML, JSON)
XML, JSON (Lecture 11 – XML, JSON)XML, JSON (Lecture 11 – XML, JSON)
XML, JSON (Lecture 11 – XML, JSON)
 
Работа с графической подсистемой (Lecture 10 – Graphics)
Работа с графической подсистемой (Lecture 10 – Graphics)Работа с графической подсистемой (Lecture 10 – Graphics)
Работа с графической подсистемой (Lecture 10 – Graphics)
 
Введение в Android-разработку (Lecture 06 – basics)
Введение в Android-разработку (Lecture 06 – basics)Введение в Android-разработку (Lecture 06 – basics)
Введение в Android-разработку (Lecture 06 – basics)
 
Android - 16 - QR
Android - 16 - QRAndroid - 16 - QR
Android - 16 - QR
 
03 коллекции
03   коллекции03   коллекции
03 коллекции
 

Fragments (Lecture 09 – Fragments)

  • 2. О чём речь? Fragment представляет часть пользовательского интерфейса. Всегда привязан к Activity. Имеет собственный lifecycle, привязанный к Activity. Подробнее Плюсы: Позволяет реализовать гибкий интерфейс. Облегчает поддержку разных экранов. Декомпозиция и упрощение логики.
  • 4. Основные классы. API 4+ via SupportLibrary android.support.v4.app.FragmentActivity android.support.v7.app.ActionBarActivity android.support.v7.app.AppCompatActivity android.support.v4.app.Fragment android.support.v4.app.FragmentManager android.support.v4.app.FragmentTransaction API 11+ android.app.Fragment android.app.FragmentManager android.app.FragmentTransaction
  • 6. Жизненный цикл onAttach(Activity) Вызывается, когда фрагмент привязывается к Activity. С этого момента можно использовать getActivity() onCreate(Bundle) Вызывается, когда система создает фрагмент. onCreateView(LayoutIn ater, ViewGroup, Bundle) Вызывается, когда фрагмент привязывается к иерархии View. onActivityCreated(Bundle) Вызывается, когда завершается onCreate() у Activity. onStart(); onResume(); onPause(); onStop() Аналогичные методы Activity. onDestroyView() Когда иерархия View разбирается. onDestroy() Вызывается, когда система разрушает фрагмент. onDetach() фрагмент больше не ассоциируется с Activity. С этого момента getActivity() возвращает null
  • 7. Базовая реализация. onCreate(Bundle) Инициализируем все ресурсы, связанные с фрагментом, кроме UI. onCreateView(LayoutIn ater, ViewGroup, Bundle) Создаем и возвращаем View фрагмента. onViewCreated(View, Bundle) Инициализируем UI, устанавливаем adapter или другие данные. onResume() Инициализируем “дорогие” ресурсы: GPS, анимация, постоянное использование сети тд. onPause() Освобождаем “дорогие” ресурсы, сохраняем состояние. onDestroyView() Зануляем все ссылки на все View если мы их сохраняли.
  • 8. Статичные фрагменты. 1 <?xml version="1.0" encoding="utf-8"?> 2 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent"> 5 6 <fragment class="com.example.android.apis.app.TitlesFragment" 7 android:id="@+id/titles" 8 android:layout_width="match_parent" 9 android:layout_height="match_parent" /> 10 11 </FrameLayout> Нельзя убрать. Нельзя передавать аргументы. Обязательно должен быть задан id или tag.
  • 9. Динамические фрагменты. Добавляются в Runtime с помощью FragmentTransaction 1 FragmentTransaction transaction = getFragmentManager() 2 .beginTransaction(); 3 transaction.add(R.id.frame, new Fragment()); 4 transaction.commit(); getFragmentManager() (или getSupportFragmentManager() в случае использования Support library) Вызывается в Activity, возвращает FragmentManager FragmentManager.beginTransaction() Создаем транзакцию. commit(), commitAllowingStateLoss() выполняем транзакцию. FragmentManager.executePendingTransactions() Убеждаемся что все транзакции завершены. Состояние сохраняется.
  • 10. Операции с фрагментами. fragmentManager. ndFragmentById(int) fragmentManager. ndFragmentByTag(String) transaction.add(int, Fragment, String) transaction.remove(Fragment) transaction.replace(int, Fragment, String) transaction.hide(Fragment) transaction.show(Fragment) transaction.detach(Fragment) API 13 transaction.attach(Fragment) API 13 С фрагментами задекларированными в layout почти ничего делать нельзя.
  • 12. Сохранение состояния Нельзя хранить ссылки на элементы layout. Сохраняется в onSaveInstanceState(Bundle) Восстанавливается если savedState не null в onCreate(), onCreateView(), onViewCreated(), и onActivityCreated(). (с API 17 onViewStateRestored()) Можно переиспользовать: setRetainInstance(true).
  • 13. Activity - Fragment, Fragment - Fragment. getFragmentManager(). ndFragmentById(int) getFragmentManager(). ndFragmentByTag(String) Fragment.getActivity() Interfaces. Fragment.setTargetFragment(Fragment, int), Fragment.getTargetFragment(). Events: EventBus, Intents/LocalBroadcastReceiver
  • 14. Наследники DialogFragment ListFragment PreferenceFragment нет в SupportLibrary WebViewFragment нет в SupportLibrary MapFragment из Google Services ViewPager + FragmentPagerAdapter
  • 15. Вложенные фрагменты API 17 Fragment.getChildFragmentManager() Fragment.getParentFragment() Состояние сохраняется. Жизненный цикл onCreateView() onDestroyView() Не умеет в Backstack. Нельзя использовать setRetainInstance(boolean) Проблемы с анимацией. Да и вообще не очень... Подробнее
  • 16. Делайте правильно, а не правильно - не делайте. Хорошо: newInstance(...) setArguments() Все диалоги – фрагменты Хорошее разделение по смыслу: один фрагмент – одна задача. Сохранять состояние. Утилитные классы для избежания копипасты.
  • 17. Делайте правильно, а не правильно - не делайте. Плохо, иногда очень: Отсутствие пустого конструктора. Забытые ссылки на элементы layout. Забытые вложенные анонимные классы, асинхронные задачи и тд. Вложенные фрагменты пересоздаются, даже если состояние родительского восстанавливается.
  • 18. Ссылки API Guides Google Fragment Training Fragment FragmentTransaction FragmentManager FragmentPagerAdapter