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

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

  • Upload
    -

  • View
    2.585

  • Download
    6

Embed Size (px)

DESCRIPTION

Лекция о нововведения в API Android в версии 3.0: Fragments, ActionBar и паттерне Drawer.

Citation preview

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

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

FragmentsActionBar

Drawer

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

18:45 2 из 50

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

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

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

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

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

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

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

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

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

18:45 3 из 50

Зачем?

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

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

18:45 4 из 50

Зачем?

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

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

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

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

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

18:45 5 из 50

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

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

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

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

– onCreate();

– onCreateView();

– onPause();

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

18:45 6 из 50

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

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

– DialogFragment

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

– ListFragment

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

– PreferenceFragment

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

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

18:45 7 из 50

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

18:45 8 из 50

- onDestroyView()

- onDetach()

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

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

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

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

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

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

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

– onAttach()

– onCreateView()

– onActivityCreated()

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

18:45 9 из 50

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

18:45 10 из 50

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

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

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

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

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

18:45 11 из 50

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

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

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

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

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

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

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

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

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

18:45 12 из 50

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

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

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

18:45 13 из 50

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

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

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

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

18:45 14 из 50

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

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

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

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

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

– add(Fragment, String);

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

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

18:45 15 из 50

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

● getFragmentManager() в activity.

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

– findFragmentByID();

– findFragmentByTag();

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

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

– addBackStackChangeListener();

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

18:45 16 из 50

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

● beginTransaction() у FragmentManager.

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

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

– add()

– remove()

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

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

– addToBackStack().

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

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

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

18:45 18 из 50

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

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

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

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

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

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

}

}

...

}

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

18:45 20 из 50

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

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

ActionBar

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

18:45 22 из 50

ActionBar

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

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

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

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

18:45 23 из 50

ActionBar

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

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

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

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

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

18:45 24 из 50

Добавление ActionBar

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

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

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

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

18:45 25 из 50

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

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

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

18:45 26 из 50

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

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

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

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

18:45 27 из 50

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

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

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

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

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

18:45 28 из 50

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

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

18:45 29 из 50

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

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

18:45 30 из 50

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

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

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

18:45 31 из 50

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

● setDisplayHomeAsUpEnabled()

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

18:45 32 из 50

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

● setDisplayHomeAsUpEnabled()

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

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

18:45 33 из 50

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

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

18:45 34 из 50

Вкладки в ActionBar

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

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

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

18:45 35 из 50

Вкладки в ActionBar

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

● setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

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

● Создать ActionBar.Tab

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

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

18:45 36 из 50

Вкладки в ActionBar

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

18:45 37 из 50

Вкладки в ActionBar

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

18:45 38 из 50

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

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

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

18:45 39 из 50

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

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

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

18:45 40 из 50

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

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

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

Drawer

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

18:45 42 из 50

Drawer

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

18:45 43 из 50

Создание Drawer

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

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

18:45 44 из 50

Создание Drawer

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

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

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

18:45 45 из 50

Создание Drawer

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

18:45 46 из 50

Создание Drawer

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

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

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

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

18:45 47 из 50

Создание Drawer

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

18:45 48 из 50

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

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

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

18:45 49 из 50

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

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

● setDrawerListener()

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

18:45 50 из 50

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