SlideShare ist ein Scribd-Unternehmen logo
1 von 50
Downloaden Sie, um offline zu lesen
«Новые» элементы 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

Weitere ähnliche Inhalte

Was ist angesagt?

Fragments (Lecture 09 – Fragments)
Fragments (Lecture 09 – Fragments)Fragments (Lecture 09 – Fragments)
Fragments (Lecture 09 – Fragments)
Noveo
 
XP.Party (iOS) - unit tests frameworks overview
XP.Party (iOS) - unit tests frameworks overviewXP.Party (iOS) - unit tests frameworks overview
XP.Party (iOS) - unit tests frameworks overview
Anton Katkov
 

Was ist angesagt? (19)

Moxy. Как правильно пользоваться? / Юрий Шмаков (Arello Mobile)
Moxy. Как правильно пользоваться? / Юрий Шмаков (Arello Mobile)Moxy. Как правильно пользоваться? / Юрий Шмаков (Arello Mobile)
Moxy. Как правильно пользоваться? / Юрий Шмаков (Arello Mobile)
 
Полный цикл тестирования React-приложений, Алексей Андросов и Наталья Стусь
Полный цикл тестирования React-приложений, Алексей Андросов и Наталья СтусьПолный цикл тестирования React-приложений, Алексей Андросов и Наталья Стусь
Полный цикл тестирования React-приложений, Алексей Андросов и Наталья Стусь
 
Fragments (Lecture 09 – Fragments)
Fragments (Lecture 09 – Fragments)Fragments (Lecture 09 – Fragments)
Fragments (Lecture 09 – Fragments)
 
Коротко о React.js
Коротко о React.jsКоротко о React.js
Коротко о React.js
 
Григорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммыГригорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммы
 
Как написать XAML-приложение без Message Bus
Как написать XAML-приложение без Message Bus Как написать XAML-приложение без Message Bus
Как написать XAML-приложение без Message Bus
 
Moxy – реализация MVP под Android. С щепоткой магии
Moxy – реализация MVP под Android. С щепоткой магииMoxy – реализация MVP под Android. С щепоткой магии
Moxy – реализация MVP под Android. С щепоткой магии
 
Автоматизируем GUI тесты на питоне
Автоматизируем GUI тесты на питонеАвтоматизируем GUI тесты на питоне
Автоматизируем GUI тесты на питоне
 
AndroidMVPHelper
AndroidMVPHelperAndroidMVPHelper
AndroidMVPHelper
 
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на QtДенис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
 
XP.Party (iOS) - unit tests frameworks overview
XP.Party (iOS) - unit tests frameworks overviewXP.Party (iOS) - unit tests frameworks overview
XP.Party (iOS) - unit tests frameworks overview
 
MVP, Moxy. Как правильно пользоваться
MVP, Moxy. Как правильно пользоватьсяMVP, Moxy. Как правильно пользоваться
MVP, Moxy. Как правильно пользоваться
 
Tdd webpack + testem + mocha + chai
Tdd webpack + testem + mocha + chaiTdd webpack + testem + mocha + chai
Tdd webpack + testem + mocha + chai
 
Windbg: когда у нас не воспроизводится. Александр Головач ➠ CoreHard Autumn ...
Windbg: когда у нас не воспроизводится. Александр Головач ➠  CoreHard Autumn ...Windbg: когда у нас не воспроизводится. Александр Головач ➠  CoreHard Autumn ...
Windbg: когда у нас не воспроизводится. Александр Головач ➠ CoreHard Autumn ...
 
Unit testing iOS Applications
Unit testing iOS ApplicationsUnit testing iOS Applications
Unit testing iOS Applications
 
Android - 09 - Fragments
Android - 09 - FragmentsAndroid - 09 - Fragments
Android - 09 - Fragments
 
«Как я научился не волноваться и полюбил Android-MVP», Никита Бартишок, ABBYY
«Как я научился не волноваться и полюбил Android-MVP», Никита Бартишок, ABBYY«Как я научился не волноваться и полюбил Android-MVP», Никита Бартишок, ABBYY
«Как я научился не волноваться и полюбил Android-MVP», Никита Бартишок, ABBYY
 
Lec 14
Lec 14Lec 14
Lec 14
 
Практика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-серверПрактика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-сервер
 

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

Web осень 2013 лекция 8
Web осень 2013 лекция 8Web осень 2013 лекция 8
Web осень 2013 лекция 8
Technopark
 
SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#
SECON
 
Как мы уменьшили сложность наших проектов
Как мы уменьшили сложность наших проектовКак мы уменьшили сложность наших проектов
Как мы уменьшили сложность наших проектов
Boris Tsema
 
Android осень 2013 лекция 1
Android осень 2013 лекция 1Android осень 2013 лекция 1
Android осень 2013 лекция 1
Technopark
 
Быть в 10 раз эффективнее благодаря Groovy
Быть в 10 раз эффективнее благодаря GroovyБыть в 10 раз эффективнее благодаря Groovy
Быть в 10 раз эффективнее благодаря Groovy
Evgeny Kompaniyets
 
CodeFest 2011. Бусыгин Р. — Создание кастомных интерфейсов для iOS
CodeFest 2011. Бусыгин Р. — Создание кастомных интерфейсов для iOSCodeFest 2011. Бусыгин Р. — Создание кастомных интерфейсов для iOS
CodeFest 2011. Бусыгин Р. — Создание кастомных интерфейсов для iOS
CodeFest
 

Ähnlich wie Лекция Android. Fragments, ActionBar, Drawer (20)

Web осень 2013 лекция 8
Web осень 2013 лекция 8Web осень 2013 лекция 8
Web осень 2013 лекция 8
 
SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#
 
Как мы уменьшили сложность наших проектов
Как мы уменьшили сложность наших проектовКак мы уменьшили сложность наших проектов
Как мы уменьшили сложность наших проектов
 
Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)
 
Enterprise flex pure mvc, slides, russian
Enterprise flex pure mvc, slides, russianEnterprise flex pure mvc, slides, russian
Enterprise flex pure mvc, slides, russian
 
Филипп Уваров, Avito
Филипп Уваров, AvitoФилипп Уваров, Avito
Филипп Уваров, Avito
 
Автоматическое тестирование мобильных приложений на основе скриншотов
Автоматическое тестирование мобильных приложений на основе скриншотовАвтоматическое тестирование мобильных приложений на основе скриншотов
Автоматическое тестирование мобильных приложений на основе скриншотов
 
Профайлинг.
Профайлинг. Профайлинг.
Профайлинг.
 
Android осень 2013 лекция 1
Android осень 2013 лекция 1Android осень 2013 лекция 1
Android осень 2013 лекция 1
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5
 
Deep Dive in Magento DI
Deep Dive in Magento DIDeep Dive in Magento DI
Deep Dive in Magento DI
 
Build a VR Pawn with Unreal Engine Luis Cataldi Russian
Build a VR Pawn with Unreal Engine   Luis Cataldi RussianBuild a VR Pawn with Unreal Engine   Luis Cataldi Russian
Build a VR Pawn with Unreal Engine Luis Cataldi Russian
 
Контейнер сервисов
Контейнер сервисовКонтейнер сервисов
Контейнер сервисов
 
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...
 
Руслан Ханов, «Контейнер сервисов — Что? Где? Когда?»
Руслан Ханов, «Контейнер сервисов — Что? Где? Когда?»Руслан Ханов, «Контейнер сервисов — Что? Где? Когда?»
Руслан Ханов, «Контейнер сервисов — Что? Где? Когда?»
 
Java осень 2014 занятие 6
Java осень 2014 занятие 6Java осень 2014 занятие 6
Java осень 2014 занятие 6
 
Java 9: what is there beyond modularization
Java 9: what is there beyond modularizationJava 9: what is there beyond modularization
Java 9: what is there beyond modularization
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
Быть в 10 раз эффективнее благодаря Groovy
Быть в 10 раз эффективнее благодаря GroovyБыть в 10 раз эффективнее благодаря Groovy
Быть в 10 раз эффективнее благодаря Groovy
 
CodeFest 2011. Бусыгин Р. — Создание кастомных интерфейсов для iOS
CodeFest 2011. Бусыгин Р. — Создание кастомных интерфейсов для iOSCodeFest 2011. Бусыгин Р. — Создание кастомных интерфейсов для iOS
CodeFest 2011. Бусыгин Р. — Создание кастомных интерфейсов для iOS
 

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