SlideShare a Scribd company logo
1 of 18
Download to read offline
Fragments
Жилич Роман
Android Internship 2014
О чем речь?
• Fragment – класс, реализующий часть(фрагмент)
Activity.
• Позволяет: реализовать гибкий интерфейс,
облегчить поддержу разных экранов,
декомпозировать и упростить логику.
• Всегда привязан к Activity.
• Собственный жизненный цикл, привязанный к циклу
Activity. Подробнее.
На картинках все просто
Основные классы
API 11+
-android.app.Fragment
-android.app.FragmentManager
-android.app.FragmentTransaction
API 4+ via SupportLibrary
-android.support.v4.app.FragmentActivity
-android.support.v4.app.Fragment
-android.support.v4.app.FragmentManager
-android.support.v4.app.FragmentTransaction
Жизненный цикл
● onAttach(Activity) – вызывается, когда фрагмент привязывается к Activity. С
этого момента можно использовать getActivity().
● onCreateView(LayoutInflater, ViewGroup, Bundle) – вызывается, когда
фрагмент привязывается к иерархии View.
● onActivityCreated(Bundle) – вызывается, когда завершается onCreate() у
Activity.
● onDestroyView() - когда иерархия View разбирается.
● onDetach() - фрагмент больше не ассоциируется с Activity. С этого момента
getActivity() возвращает null.
Базовая реализация
● onCreate(Bundle) – инициализируем все ресурсы, связанные с фрагментом,
кроме UI.
● onCreateView(LayoutInflater, ViewGroup, Bundle) – создаем и возвращаем View
фрагмента. Реализация этого метода не обязательна.
● onActivityCreated(Bundle savedInstanceState) – инициализируем UI,
устанавливаем adapter или другие данные.
Базовая реализация
● onResume() - инициализируем “дорогие” ресурсы: GPS, анимация, постоянное
использование сети тд.
● onPause() - освобождаем “дорогие” ресурсы, сохраняем состояние.
● onDestoryView() - зануляем все ссылки на все View если мы их сохраняли.
Добавление фрагментов
1. Тег <fragment> в layout.
2. Нельзя убрать.
3. Нельзя передавать аргументы.
4. Обязательно должен быть задан id или tag.
Добавление фрагментов
2. В Runtime с использованием FragmentTransaction
● Fragment.setArguments(Bundle) – Передаем аргументы.
● FragmentManager.beginTransaction() - Создаем транзакцию.
● FragmentManager.executePendingTransactions() - Убеждаемся что все
транзакции завершены.
● commit(), commitAllowingStateLoss() - выполняем транзакцию.
● Состояние сохраняется.
Операции с фрагментами
●FragmentManager.findFragmentById(int)
●FragmentManager.findFragmentByTag(String)
●add(int, Fragment, String)
●remove(Fragment)
●replace(int, Fragment, String)
●hide(Fragment)
●show(Fragment)
●detach(Fragment) API 13
●attach(Fragment) API 13
●С фрагментами задекларированными в layout почти ничего делать нельзя.
Backstack
●FragmentTransaction.addToBackStack(String).
●FragmentManager.popBackStack().
●FragmentManager.getBackStackEntryCount()
●FragmentManager.getBackStackEntryAt(int)
●По возвращению из стека onCreateView(), onActivityCreated(), onStart(), and
onResume().
●Поведение FragmentActivity по умолчанию:
if (!fragmentManager.popBackStackImmediate()) {
finish();
}
Сохранение состояния
●Нельзя хранить ссылки на элементы layout.
●Сохраняется в onSaveInstanceState(Bundle)
●Восстанавливается если savedState не null в onCreate(), onCreateView(), и
onActivityCreated().
●Можно переиспользовать: setRetainInstance(true).
●findFragment…
●Fragment.getActivity(): findViewById, get..., cast и тд.
●Interfaces.
●Fragment.setTargetFragment(Fragment, int), Fragment.
getTargetRequestCode(), Fragment.getTargetFragment().
●Events: EventBus, Intents/LocalBroadcastReceiver
Fragment vs. FragmentActivity
Наследники
●DialogFragment
●ListFragment
●PreferenceFragment нет в SupportLibrary
●WebViewFragment нет в SupportLibrary
●MapFragment из Google Services
●ViewPager + FragmentPagerAdapter
Вложенные фрагменты
API 17
●Fragment.getChildFragmentManager()
●Fragment.getParentFragment()
●Состояние сохраняется.
●Жизненный цикл onCreateView() onDestroyView()
●Проблемы с анимацией.
●Нельзя использовать setRetainInstance(boolean)
●Да и вообще не очень...
Делайте правильно, а не
правильно - не делайте
Хорошо:
● newInstance(...)
● setArguments()
● Все диалоги – фрагменты
● Хорошее разделение по смыслу: один фрагмент – одна задача.
● Сохранять состояние.
● Утилитные классы для избежания копипасты.
● ListFragment, WebViewFragment.
Делайте правильно, а не
правильно - не делайте
Плохо, иногда очень:
● Отсутствие пустого конструктора.
● Забытые ссылки на элементы layout.
● Забытые вложенные анонимные классы, асинхронные задачи и тд.
● Вложенные фрагменты пересоздаются, даже если состояние родительского
восстанавливается.
Ссылки
● API Guides
● Google Fragment Training
● Fragment
● FragmentTransaction
● FragmentManager
● FragmentPagerAdapter

More Related Content

What's hot

Как приручить реактивное программирование в XAML приложениях
Как приручить реактивное программирование в XAML приложенияхКак приручить реактивное программирование в XAML приложениях
Как приручить реактивное программирование в XAML приложенияхDenis Tsvettsih
 
Релиз PHP7 - что нас ждет в октябре 2015
Релиз PHP7 - что нас ждет в октябре 2015Релиз PHP7 - что нас ждет в октябре 2015
Релиз PHP7 - что нас ждет в октябре 2015Andrey Tokarchuk
 
Лекция Android. Fragments, ActionBar, Drawer
Лекция Android. Fragments, ActionBar, DrawerЛекция Android. Fragments, ActionBar, Drawer
Лекция Android. Fragments, ActionBar, DrawerАлександр Брич
 
Git (presentation)
Git (presentation)Git (presentation)
Git (presentation)Anton Ivanov
 
Навигация в Android без боли и слез
Навигация в Android без боли и слезНавигация в Android без боли и слез
Навигация в Android без боли и слезMobileUp
 

What's hot (10)

Как приручить реактивное программирование в XAML приложениях
Как приручить реактивное программирование в XAML приложенияхКак приручить реактивное программирование в XAML приложениях
Как приручить реактивное программирование в XAML приложениях
 
Релиз PHP7 - что нас ждет в октябре 2015
Релиз PHP7 - что нас ждет в октябре 2015Релиз PHP7 - что нас ждет в октябре 2015
Релиз PHP7 - что нас ждет в октябре 2015
 
TeaVM: dead code elimination and devirtualization
TeaVM: dead code elimination and devirtualizationTeaVM: dead code elimination and devirtualization
TeaVM: dead code elimination and devirtualization
 
Лекция Android. Fragments, ActionBar, Drawer
Лекция Android. Fragments, ActionBar, DrawerЛекция Android. Fragments, ActionBar, Drawer
Лекция Android. Fragments, ActionBar, Drawer
 
Lec 14
Lec 14Lec 14
Lec 14
 
Лекция 2. Activity.
Лекция 2. Activity.Лекция 2. Activity.
Лекция 2. Activity.
 
Git (presentation)
Git (presentation)Git (presentation)
Git (presentation)
 
Git
GitGit
Git
 
Fragments, ActionBar, Drawer
Fragments, ActionBar, DrawerFragments, ActionBar, Drawer
Fragments, ActionBar, Drawer
 
Навигация в Android без боли и слез
Навигация в Android без боли и слезНавигация в Android без боли и слез
Навигация в Android без боли и слез
 

Similar to Android - 09 - Fragments

Android - 11 - Multithreading
Android - 11 - MultithreadingAndroid - 11 - Multithreading
Android - 11 - MultithreadingNoveo
 
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The GrinderИлья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The GrinderSQALab
 
AndroidMVPHelper
AndroidMVPHelperAndroidMVPHelper
AndroidMVPHelperDataArt
 
Асинхронность и сопрограммы
Асинхронность и сопрограммыАсинхронность и сопрограммы
Асинхронность и сопрограммыPlatonov Sergey
 
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Noveo
 
FPUG Dzyga presentation
FPUG Dzyga presentationFPUG Dzyga presentation
FPUG Dzyga presentationIvan Filimonov
 
Коротко о React.js
Коротко о React.jsКоротко о React.js
Коротко о React.jsMad Devs
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationAndrii Dzynia
 
Froglogic Squish
Froglogic Squish Froglogic Squish
Froglogic Squish SQALab
 
Android Development Course in HSE lecture #3
Android Development Course in HSE lecture #3Android Development Course in HSE lecture #3
Android Development Course in HSE lecture #3Empatika
 
Groovy presentation.
Groovy presentation.Groovy presentation.
Groovy presentation.Infinity
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobileUA Mobile
 
2015-12-06 Антон Тарасенко - Ваш следующий сервис будет асинхронным
2015-12-06 Антон Тарасенко - Ваш следующий сервис будет асинхронным2015-12-06 Антон Тарасенко - Ваш следующий сервис будет асинхронным
2015-12-06 Антон Тарасенко - Ваш следующий сервис будет асинхроннымHappyDev
 
Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”GlobalLogic Ukraine
 
Android осень 2013 лекция 3
Android осень 2013 лекция 3Android осень 2013 лекция 3
Android осень 2013 лекция 3Technopark
 
Разработка энерго-эффективных Tizen приложений для Gear
Разработка энерго-эффективных Tizen приложений для GearРазработка энерго-эффективных Tizen приложений для Gear
Разработка энерго-эффективных Tizen приложений для GearKirill Danilov
 

Similar to Android - 09 - Fragments (20)

Android - 11 - Multithreading
Android - 11 - MultithreadingAndroid - 11 - Multithreading
Android - 11 - Multithreading
 
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The GrinderИлья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
 
AndroidMVPHelper
AndroidMVPHelperAndroidMVPHelper
AndroidMVPHelper
 
Git for you
Git for youGit for you
Git for you
 
Асинхронность и сопрограммы
Асинхронность и сопрограммыАсинхронность и сопрограммы
Асинхронность и сопрограммы
 
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
 
FPUG Dzyga presentation
FPUG Dzyga presentationFPUG Dzyga presentation
FPUG Dzyga presentation
 
Коротко о React.js
Коротко о React.jsКоротко о React.js
Коротко о React.js
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
 
Froglogic Squish
Froglogic Squish Froglogic Squish
Froglogic Squish
 
Android Development Course in HSE lecture #3
Android Development Course in HSE lecture #3Android Development Course in HSE lecture #3
Android Development Course in HSE lecture #3
 
Groovy presentation.
Groovy presentation.Groovy presentation.
Groovy presentation.
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
 
Обзор возможностей HTML5
Обзор возможностей HTML5Обзор возможностей HTML5
Обзор возможностей HTML5
 
2015-12-06 Антон Тарасенко - Ваш следующий сервис будет асинхронным
2015-12-06 Антон Тарасенко - Ваш следующий сервис будет асинхронным2015-12-06 Антон Тарасенко - Ваш следующий сервис будет асинхронным
2015-12-06 Антон Тарасенко - Ваш следующий сервис будет асинхронным
 
Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”
 
Android осень 2013 лекция 3
Android осень 2013 лекция 3Android осень 2013 лекция 3
Android осень 2013 лекция 3
 
Fragments&Loaders
Fragments&LoadersFragments&Loaders
Fragments&Loaders
 
ZooKeeper Java Cloud
ZooKeeper Java CloudZooKeeper Java Cloud
ZooKeeper Java Cloud
 
Разработка энерго-эффективных Tizen приложений для Gear
Разработка энерго-эффективных Tizen приложений для GearРазработка энерго-эффективных Tizen приложений для Gear
Разработка энерго-эффективных Tizen приложений для Gear
 

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
 
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Noveo
 
Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Noveo
 
Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)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
 
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
 
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
 
Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)Noveo
 
Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)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)
 
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
 
Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)
 
Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)
 
Основы 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
 
Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)
 
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)
 
Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)
 
Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)
 

Android - 09 - Fragments

  • 2. О чем речь? • Fragment – класс, реализующий часть(фрагмент) Activity. • Позволяет: реализовать гибкий интерфейс, облегчить поддержу разных экранов, декомпозировать и упростить логику. • Всегда привязан к Activity. • Собственный жизненный цикл, привязанный к циклу Activity. Подробнее.
  • 4. Основные классы API 11+ -android.app.Fragment -android.app.FragmentManager -android.app.FragmentTransaction API 4+ via SupportLibrary -android.support.v4.app.FragmentActivity -android.support.v4.app.Fragment -android.support.v4.app.FragmentManager -android.support.v4.app.FragmentTransaction
  • 5. Жизненный цикл ● onAttach(Activity) – вызывается, когда фрагмент привязывается к Activity. С этого момента можно использовать getActivity(). ● onCreateView(LayoutInflater, ViewGroup, Bundle) – вызывается, когда фрагмент привязывается к иерархии View. ● onActivityCreated(Bundle) – вызывается, когда завершается onCreate() у Activity. ● onDestroyView() - когда иерархия View разбирается. ● onDetach() - фрагмент больше не ассоциируется с Activity. С этого момента getActivity() возвращает null.
  • 6. Базовая реализация ● onCreate(Bundle) – инициализируем все ресурсы, связанные с фрагментом, кроме UI. ● onCreateView(LayoutInflater, ViewGroup, Bundle) – создаем и возвращаем View фрагмента. Реализация этого метода не обязательна. ● onActivityCreated(Bundle savedInstanceState) – инициализируем UI, устанавливаем adapter или другие данные.
  • 7. Базовая реализация ● onResume() - инициализируем “дорогие” ресурсы: GPS, анимация, постоянное использование сети тд. ● onPause() - освобождаем “дорогие” ресурсы, сохраняем состояние. ● onDestoryView() - зануляем все ссылки на все View если мы их сохраняли.
  • 8. Добавление фрагментов 1. Тег <fragment> в layout. 2. Нельзя убрать. 3. Нельзя передавать аргументы. 4. Обязательно должен быть задан id или tag.
  • 9. Добавление фрагментов 2. В Runtime с использованием FragmentTransaction ● Fragment.setArguments(Bundle) – Передаем аргументы. ● FragmentManager.beginTransaction() - Создаем транзакцию. ● FragmentManager.executePendingTransactions() - Убеждаемся что все транзакции завершены. ● commit(), commitAllowingStateLoss() - выполняем транзакцию. ● Состояние сохраняется.
  • 10. Операции с фрагментами ●FragmentManager.findFragmentById(int) ●FragmentManager.findFragmentByTag(String) ●add(int, Fragment, String) ●remove(Fragment) ●replace(int, Fragment, String) ●hide(Fragment) ●show(Fragment) ●detach(Fragment) API 13 ●attach(Fragment) API 13 ●С фрагментами задекларированными в layout почти ничего делать нельзя.
  • 11. Backstack ●FragmentTransaction.addToBackStack(String). ●FragmentManager.popBackStack(). ●FragmentManager.getBackStackEntryCount() ●FragmentManager.getBackStackEntryAt(int) ●По возвращению из стека onCreateView(), onActivityCreated(), onStart(), and onResume(). ●Поведение FragmentActivity по умолчанию: if (!fragmentManager.popBackStackImmediate()) { finish(); }
  • 12. Сохранение состояния ●Нельзя хранить ссылки на элементы layout. ●Сохраняется в onSaveInstanceState(Bundle) ●Восстанавливается если savedState не null в onCreate(), onCreateView(), и onActivityCreated(). ●Можно переиспользовать: setRetainInstance(true).
  • 13. ●findFragment… ●Fragment.getActivity(): findViewById, get..., cast и тд. ●Interfaces. ●Fragment.setTargetFragment(Fragment, int), Fragment. getTargetRequestCode(), Fragment.getTargetFragment(). ●Events: EventBus, Intents/LocalBroadcastReceiver Fragment vs. FragmentActivity
  • 14. Наследники ●DialogFragment ●ListFragment ●PreferenceFragment нет в SupportLibrary ●WebViewFragment нет в SupportLibrary ●MapFragment из Google Services ●ViewPager + FragmentPagerAdapter
  • 15. Вложенные фрагменты API 17 ●Fragment.getChildFragmentManager() ●Fragment.getParentFragment() ●Состояние сохраняется. ●Жизненный цикл onCreateView() onDestroyView() ●Проблемы с анимацией. ●Нельзя использовать setRetainInstance(boolean) ●Да и вообще не очень...
  • 16. Делайте правильно, а не правильно - не делайте Хорошо: ● newInstance(...) ● setArguments() ● Все диалоги – фрагменты ● Хорошее разделение по смыслу: один фрагмент – одна задача. ● Сохранять состояние. ● Утилитные классы для избежания копипасты. ● ListFragment, WebViewFragment.
  • 17. Делайте правильно, а не правильно - не делайте Плохо, иногда очень: ● Отсутствие пустого конструктора. ● Забытые ссылки на элементы layout. ● Забытые вложенные анонимные классы, асинхронные задачи и тд. ● Вложенные фрагменты пересоздаются, даже если состояние родительского восстанавливается.
  • 18. Ссылки ● API Guides ● Google Fragment Training ● Fragment ● FragmentTransaction ● FragmentManager ● FragmentPagerAdapter