ݺߣ

ݺߣShare a Scribd company logo
«Новые» элементы Android

Fragments
ActionBar
Drawer
Что такое Фрагменты?
●

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

●

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

●

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

●

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

●

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

●

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

●

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

18:45

2 из 50
Зачем?
●

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

18:45

3 из 50
Зачем?
●

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

●

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

●

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

●

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

18:45

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

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

●

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

●

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

onCreate();

–

onCreateView();

–

onPause();

18:45

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

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

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

–

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

–

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

18:45

6 из 50
18:45

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

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

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

–

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

–

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

●

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

●

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

onAttach()

- onDestroyView()

–

onCreateView()

- onDetach()

–

onActivityCreated()

18:45

8 из 50
18:45

9 из 50
Добавление интерфейса
●

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

●

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

●

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

18:45

10 из 50
Добавление интерфейса
●

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

●

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

●

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

●

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

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

–

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

–

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

18:45

11 из 50
Добавление фрагментов в activity
●

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

18:45

12 из 50
Добавление фрагментов в activity
●

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

Для идентификации fragment необходим ID:
●
●
●

18:45

android:id
android:tag
или id контейнера (назначает система)

13 из 50
Добавление фрагментов в activity
●

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

●

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

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

–

Выполнить FragmentTransaction.

–

add(Fragment, String);

–

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

18:45

14 из 50
Управление фрагментами
●

getFragmentManager() в activity.

●

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

●

findFragmentByID();
findFragmentByTag();

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

●

popBackStack();

Добавить обработчик BackStack:
–

18:45

addBackStackChangeListener();

15 из 50
Операции с фрагментами
●

beginTransaction() у FragmentManager.

●

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

●

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

add()

–

remove()

–

replace()

●

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

●

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

18:45

addToBackStack().
16 из 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

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

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

●

В activity: getFragmentManager().findFragmentById().

●

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

18:45

18 из 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

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

18:45

20 из 50
ActionBar
ActionBar

●

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

●

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

●

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

18:45

22 из 50
ActionBar

●

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

●

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

●

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

●

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

18:45

23 из 50
Добавление ActionBar
●

●

●

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

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

18:45

24 из 50
Добавление действий в ActionBar
●

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

18:45

25 из 50
Добавление действий в ActionBar
●

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

●

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

18:45

26 из 50
Добавление действий в ActionBar
●

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

●

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

●

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

18:45

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

18:45

28 из 50
Разделенный ActionBar

18:45

29 из 50
Разделенный ActionBar
●

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

18:45

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

●

setDisplayHomeAsUpEnabled()

18:45

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

●

setDisplayHomeAsUpEnabled()

●

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

18:45

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

18:45

33 из 50
Вкладки в ActionBar

●

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

●

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

18:45

34 из 50
Вкладки в ActionBar
●

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

●

setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

●

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

●

Создать ActionBar.Tab

●

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

18:45

35 из 50
Вкладки в ActionBar

18:45

36 из 50
Вкладки в ActionBar

18:45

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

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

18:45

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

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

●

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

18:45

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

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

●

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

●

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

18:45

40 из 50
Drawer
Drawer

18:45

42 из 50
Создание Drawer
●

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

18:45

43 из 50
Создание Drawer
●

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

●

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

18:45

44 из 50
Создание Drawer

18:45

45 из 50
Создание Drawer
●

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

●

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

●

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

18:45

46 из 50
Создание Drawer

18:45

47 из 50
Открытие и закрытие Drawer
●

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

18:45

48 из 50
Открытие и закрытие Drawer
●

●

Реализовать DrawerLayout.DrawerListener или
ActionBarDrawerToggle
setDrawerListener()

18:45

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

18:45

50 из 50

More Related Content

Лекция Android. Fragments, ActionBar, Drawer