49
«Новые» элементы Android Fragments ActionBar Drawer

Fragments, ActionBar, Drawer

  • Upload
    -

  • View
    593

  • Download
    3

Embed Size (px)

DESCRIPTION

Небольшой обзор использования фрагментов, современного ActionBar'а и бокового меню Drawer.

Citation preview

Page 1: Fragments, ActionBar, Drawer

«Новые» элементы Android

FragmentsActionBar

Drawer

Page 2: Fragments, ActionBar, Drawer

10:18 2 из 49

Что такое Фрагменты?

● Являются частью activity.

● Имеют собственный жизненный цикл.

● Могут быть использованы повторно (в др. activity).

● Статическое и динамическое добавление.

● Может существовать без видимого интерфейса.

● Можно «вручную» поместить в BackStack.

● Добавлены в API Level 11 (Android 3.0)

Page 3: Fragments, ActionBar, Drawer

10:18 3 из 49

Зачем?

● Рациональное использование больших экранов.

Page 4: Fragments, ActionBar, Drawer

10:18 4 из 49

Зачем?

● Рациональное использование больших экранов.

● Инкапсулирует некоторую функциональность.

● Улучшают повторное использование компонентов.

● Управление BackStack.

Page 5: Fragments, ActionBar, Drawer

10:18 5 из 49

Создание фрагментов

● Определить класс-наследник от Fragment.

● Код очень похож на код в activity.

● Важные методы жизненного цикла:

– onCreate();

– onCreateView();

– onPause();

Page 6: Fragments, ActionBar, Drawer

10:18 6 из 49

Создание фрагментов

● Специализированные классы-наследники Fragment

– DialogFragment

Создание всплывающего диалогового окна

– ListFragment

Отображение списка элементов (похоже на ListActivity)

– PreferenceFragment

Отображение списка настроек (похоже на PreferenceActivty)

Page 7: Fragments, ActionBar, Drawer

10:18 7 из 49

Page 8: Fragments, ActionBar, Drawer

10:18 8 из 49

- onDestroyView()

- onDetach()

Управление жизненным циклом

● 3 состояния:

– Resumed (выполнение),

– Paused (приостановлен),

– Stopped (остановлен).

● Главное отличие — способ хранения в BackStack.

● Особые callback-методы фрагмента:

– onAttach()

– onCreateView()

– onActivityCreated()

Page 9: Fragments, ActionBar, Drawer

10:18 9 из 49

Page 10: Fragments, ActionBar, Drawer

10:18 10 из 49

Добавление интерфейса

● Интерфейс создается в onCreateView().

● Можно использовать LayoutInflater.

● Обязательно вернуть View (можно и null :) )

Page 11: Fragments, ActionBar, Drawer

10:18 11 из 49

Добавление интерфейса

● Интерфейс создается в onCreateView().

● Можно использовать LayoutInflater.

● Обязательно вернуть View (можно и null :) )

● Параметры метода inflate(int, ViewGroup, boolean):

– id шаблона для fragment;

– container, в который будет помещён fragment;

– надо ли привязывать шаблон к container.

Page 12: Fragments, ActionBar, Drawer

10:18 12 из 49

Добавление фрагментов в activity

● Статичное — xml шаблон activity:

Page 13: Fragments, ActionBar, Drawer

10:18 13 из 49

Добавление фрагментов в activity

● Статичное — xml шаблон activity:

– Для идентификации fragment необходим ID:● android:id● android:tag● или id контейнера (назначает система)

Page 14: Fragments, ActionBar, Drawer

10:18 14 из 49

Добавление фрагментов в activity

● Статичное — xml шаблон activity

● Динамическое — из кода activity:

– Получить доступ к FragmentManager.

– Выполнить FragmentTransaction.

– add(Fragment, String);

– не вызывается onCreateView().

Page 15: Fragments, ActionBar, Drawer

10:18 15 из 49

Управление фрагментами

● getFragmentManager() в activity.

● Получить доступ к созданным ранее fragment:

– findFragmentByID();

– findFragmentByTag();

● Убрать последний fragment из BackStack:

– popBackStack();● Добавить обработчик BackStack:

– addBackStackChangeListener();

Page 16: Fragments, ActionBar, Drawer

10:18 16 из 49

Операции с фрагментами

● beginTransaction() у FragmentManager.

● Набор изменений — одна операция (transaction).

● Возможные изменения:

– add()

– remove()

– replace()● Завершение операции методом commit().

● Сохранение операций в BackStack.

– addToBackStack().

Page 17: Fragments, ActionBar, Drawer

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();

Page 18: Fragments, ActionBar, Drawer

10:18 18 из 49

Взаимодействие с фрагментами

● В фрагменте: getActivity().

● В activity: getFragmentManager().findFragmentById().

● Передача событий в activity():

Page 19: Fragments, ActionBar, Drawer

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");

}

}

...

}

Page 20: Fragments, ActionBar, Drawer

10:18 20 из 49

Взаимодействие с activity

Page 21: Fragments, ActionBar, Drawer

ActionBar

Page 22: Fragments, ActionBar, Drawer

10:18 22 из 49

ActionBar

● Значок приложения

● Значки-действия (action item)

● Значок-переполнения (overflow action)

Page 23: Fragments, ActionBar, Drawer

10:18 23 из 49

ActionBar

● Предоставляет удобный способ навигации

● Быстрый доступ к важным действиям

● Добавлен в API Level 11 (Android 3.0)

● Доступен в SupportLibrary (API Level 7)

Page 24: Fragments, ActionBar, Drawer

10:18 24 из 49

Добавление ActionBar

● Activity наследуется от ActionBarActivity

● Наследевание темы приложения от Theme.AppCompat (или ThemeHolo)

● Обращение через getSupportActionBar(); (getActionBar())

Page 25: Fragments, ActionBar, Drawer

10:18 25 из 49

Добавление действий в ActionBar

● Создание xml-файла меню:

Page 26: Fragments, ActionBar, Drawer

10:18 26 из 49

Добавление действий в ActionBar

● Создание xml-файла меню.

● Переопределение метода onCreateOptionsMenu():

Page 27: Fragments, ActionBar, Drawer

10:18 27 из 49

Добавление действий в ActionBar

● Создание xml-файла меню.

● Переопределение метода onCreateOptionsMenu().

● Отображение действия в виде кнопки в ActionBar:

Page 28: Fragments, ActionBar, Drawer

10:18 28 из 49

Обработка нажатий на action items

Page 29: Fragments, ActionBar, Drawer

10:18 29 из 49

Разделенный ActionBar

Page 30: Fragments, ActionBar, Drawer

10:18 30 из 49

Разделенный ActionBar

● Добавить uiOption в AndroidManifest.xml

Page 31: Fragments, ActionBar, Drawer

10:18 31 из 49

«Назад» через значок приложения

● setDisplayHomeAsUpEnabled()

Page 32: Fragments, ActionBar, Drawer

10:18 32 из 49

«Назад» через значок приложения

● setDisplayHomeAsUpEnabled()

● Определить родительскую activity в AndroidManifest()

Page 33: Fragments, ActionBar, Drawer

10:18 33 из 49

«Назад» через значок приложения

Page 34: Fragments, ActionBar, Drawer

10:18 34 из 49

Вкладки в ActionBar

● Подстраиваются под размер экрана

● Удобнее, чем TabView.

Page 35: Fragments, ActionBar, Drawer

10:18 35 из 49

Вкладки в ActionBar

● Необходим контейнер (ViewGroup) в шаблоне

● setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

● Реализовать ActionBar.TabListener

● Создать ActionBar.Tab

● Добавить в ActionBar - add()

Page 36: Fragments, ActionBar, Drawer

10:18 36 из 49

Вкладки в ActionBar

Page 37: Fragments, ActionBar, Drawer

10:18 37 из 49

Вкладки в ActionBar

Page 38: Fragments, ActionBar, Drawer

10:18 38 из 49

Ещё больше возможностей ActionBar

● Добавление Action View

Page 39: Fragments, ActionBar, Drawer

10:18 39 из 49

Ещё больше возможностей ActionBar

● Добавление Action View● Добавление Action Provider

Page 40: Fragments, ActionBar, Drawer

10:18 40 из 49

Ещё больше возможностей ActionBar

● Добавление Action View● Добавление Action Provider● Добавление выпадающих списков (Drop-down)

Page 41: Fragments, ActionBar, Drawer

Drawer

Page 42: Fragments, ActionBar, Drawer

10:18 42 из 49

Drawer

Page 43: Fragments, ActionBar, Drawer

10:18 43 из 49

Создание Drawer

● Создать шаблон с DrawerLayout

Page 44: Fragments, ActionBar, Drawer

10:18 44 из 49

Создание Drawer

● Создать шаблон с DrawerLayout

● Инициализировать список элементов Drawer

Page 45: Fragments, ActionBar, Drawer

10:18 45 из 49

Создание Drawer

Page 46: Fragments, ActionBar, Drawer

10:18 46 из 49

Создание Drawer

● Создать шаблон с DrawerLayout

● Инициализировать список элементов Drawer

● Обрабатывать нажатия на элементы списка

Page 47: Fragments, ActionBar, Drawer

10:18 47 из 49

Создание Drawer

Page 48: Fragments, ActionBar, Drawer

10:18 48 из 49

Открытие и закрытие Drawer

● Реализовать DrawerLayout.DrawerListener или ActionBarDrawerToggle

● setDrawerListener()

Page 49: Fragments, ActionBar, Drawer

10:18 49 из 49

Открытие и закрытие Drawer