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