Лекция android. fragments, actionbar, drawer
DESCRIPTION
Лекция о нововведения в API Android в версии 3.0: Fragments, ActionBar и паттерне Drawer.TRANSCRIPT
«Новые» элементы Android
FragmentsActionBar
Drawer
18:45 2 из 50
Что такое Фрагменты?
● Являются частью activity.
● Имеют собственный жизненный цикл.
● Могут быть использованы повторно (в др. activity).
● Статическое и динамическое добавление.
● Может существовать без видимого интерфейса.
● Можно «вручную» поместить в BackStack.
● Добавлены в API Level 11 (Android 3.0)
18:45 3 из 50
Зачем?
● Рациональное использование больших экранов.
18:45 4 из 50
Зачем?
● Рациональное использование больших экранов.
● Инкапсулирует некоторую функциональность.
● Улучшают повторное использование компонентов.
● Управление BackStack.
18:45 5 из 50
Создание фрагментов
● Определить класс-наследник от Fragment.
● Код очень похож на код в activity.
● Важные методы жизненного цикла:
– onCreate();
– onCreateView();
– onPause();
18:45 6 из 50
Создание фрагментов
● Специализированные классы-наследники Fragment
– DialogFragment
Создание всплывающего диалогового окна
– ListFragment
Отображение списка элементов (похоже на ListActivity)
– PreferenceFragment
Отображение списка настроек (похоже на PreferenceActivty)
18:45 7 из 50
18:45 8 из 50
- onDestroyView()
- onDetach()
Управление жизненным циклом
● 3 состояния:
– Resumed (выполнение),
– Paused (приостановлен),
– Stopped (остановлен).
● Главное отличие — способ хранения в BackStack.
● Особые callback-методы фрагмента:
– onAttach()
– onCreateView()
– onActivityCreated()
18:45 9 из 50
18:45 10 из 50
Добавление интерфейса
● Интерфейс создается в onCreateView().
● Можно использовать LayoutInflater.
● Обязательно вернуть View (можно и null :) )
18:45 11 из 50
Добавление интерфейса
● Интерфейс создается в onCreateView().
● Можно использовать LayoutInflater.
● Обязательно вернуть View (можно и null :) )
● Параметры метода inflate(int, ViewGroup, boolean):
– id шаблона для fragment;
– container, в который будет помещён fragment;
– надо ли привязывать шаблон к container.
18:45 12 из 50
Добавление фрагментов в activity
● Статичное — xml шаблон activity:
18:45 13 из 50
Добавление фрагментов в activity
● Статичное — xml шаблон activity:
– Для идентификации fragment необходим ID:● android:id● android:tag● или id контейнера (назначает система)
18:45 14 из 50
Добавление фрагментов в activity
● Статичное — xml шаблон activity
● Динамическое — из кода activity:
– Получить доступ к FragmentManager.
– Выполнить FragmentTransaction.
– add(Fragment, String);
– не вызывается onCreateView().
18:45 15 из 50
Управление фрагментами
● getFragmentManager() в activity.
● Получить доступ к созданным ранее fragment:
– findFragmentByID();
– findFragmentByTag();
● Убрать последний fragment из BackStack:
– popBackStack();● Добавить обработчик BackStack:
– addBackStackChangeListener();
18:45 16 из 50
Операции с фрагментами
● beginTransaction() у FragmentManager.
● Набор изменений — одна операция (transaction).
● Возможные изменения:
– add()
– remove()
– replace()● Завершение операции методом commit().
● Сохранение операций в BackStack.
– addToBackStack().
18:45 17 из 50
Операции с фрагментами
// Создание нового фрагмента и операции
Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
// Заменяем всё, чтобы не находилось в fragment_container
// новым фрагментом и добавляем в BackStack
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
// Совершаем операцию
transaction.commit();
18:45 18 из 50
Взаимодействие с фрагментами
● В фрагменте: getActivity().
● В activity: getFragmentManager().findFragmentById().
● Передача событий в activity():
18:45 19 из 50
Взаимодействие с activity
public static class FragmentA extends ListFragment {
OnArticleSelectedListener mListener;
...
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mListener = (OnArticleSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement OnArticleSelectedListener");
}
}
...
}
18:45 20 из 50
Взаимодействие с activity
ActionBar
18:45 22 из 50
ActionBar
● Значок приложения
● Значки-действия (action item)
● Значок-переполнения (overflow action)
18:45 23 из 50
ActionBar
● Предоставляет удобный способ навигации
● Быстрый доступ к важным действиям
● Добавлен в API Level 11 (Android 3.0)
● Доступен в SupportLibrary (API Level 7)
18:45 24 из 50
Добавление ActionBar
● Activity наследуется от ActionBarActivity
● Наследевание темы приложения от Theme.AppCompat (или ThemeHolo)
● Обращение через getSupportActionBar(); (getActionBar())
18:45 25 из 50
Добавление действий в ActionBar
● Создание xml-файла меню:
18:45 26 из 50
Добавление действий в ActionBar
● Создание xml-файла меню.
● Переопределение метода onCreateOptionsMenu():
18:45 27 из 50
Добавление действий в ActionBar
● Создание xml-файла меню.
● Переопределение метода onCreateOptionsMenu().
● Отображение действия в виде кнопки в ActionBar:
18:45 28 из 50
Обработка нажатий на action items
18:45 29 из 50
Разделенный ActionBar
18:45 30 из 50
Разделенный ActionBar
● Добавить uiOption в AndroidManifest.xml
18:45 31 из 50
«Назад» через значок приложения
● setDisplayHomeAsUpEnabled()
18:45 32 из 50
«Назад» через значок приложения
● setDisplayHomeAsUpEnabled()
● Определить родительскую activity в AndroidManifest()
18:45 33 из 50
«Назад» через значок приложения
18:45 34 из 50
Вкладки в ActionBar
● Подстраиваются под размер экрана
● Удобнее, чем TabView.
18:45 35 из 50
Вкладки в ActionBar
● Необходим контейнер (ViewGroup) в шаблоне
● setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
● Реализовать ActionBar.TabListener
● Создать ActionBar.Tab
● Добавить в ActionBar - add()
18:45 36 из 50
Вкладки в ActionBar
18:45 37 из 50
Вкладки в ActionBar
18:45 38 из 50
Ещё больше возможностей ActionBar
● Добавление Action View
18:45 39 из 50
Ещё больше возможностей ActionBar
● Добавление Action View● Добавление Action Provider
18:45 40 из 50
Ещё больше возможностей ActionBar
● Добавление Action View● Добавление Action Provider● Добавление выпадающих списков (Drop-down)
Drawer
18:45 42 из 50
Drawer
18:45 43 из 50
Создание Drawer
● Создать шаблон с DrawerLayout
18:45 44 из 50
Создание Drawer
● Создать шаблон с DrawerLayout
● Инициализировать список элементов Drawer
18:45 45 из 50
Создание Drawer
18:45 46 из 50
Создание Drawer
● Создать шаблон с DrawerLayout
● Инициализировать список элементов Drawer
● Обрабатывать нажатия на элементы списка
18:45 47 из 50
Создание Drawer
18:45 48 из 50
Открытие и закрытие Drawer
● Реализовать DrawerLayout.DrawerListener или ActionBarDrawerToggle
18:45 49 из 50
Открытие и закрытие Drawer
● Реализовать DrawerLayout.DrawerListener или ActionBarDrawerToggle
● setDrawerListener()
18:45 50 из 50
Открытие и закрытие Drawer