2. Что такое Фрагменты?
●
Являются частью activity.
●
Имеют собственный жизненный цикл.
●
Могут быть использованы повторно (в др. activity).
●
Статическое и динамическое добавление.
●
Может существовать без видимого интерфейса.
●
Можно «вручную» поместить в BackStack.
●
Добавлены в API Level 11 (Android 3.0)
18:45
2 из 50
4. Зачем?
●
Рациональное использование больших экранов.
●
Инкапсулирует некоторую функциональность.
●
Улучшают повторное использование компонентов.
●
Управление BackStack.
18:45
4 из 50
6. Создание фрагментов
●
Специализированные классы-наследники Fragment
–
DialogFragment
Создание всплывающего диалогового окна
–
ListFragment
Отображение списка элементов (похоже на ListActivity)
–
PreferenceFragment
Отображение списка настроек (похоже на
PreferenceActivty)
18:45
6 из 50
11. Добавление интерфейса
●
Интерфейс создается в onCreateView().
●
Можно использовать LayoutInflater.
●
Обязательно вернуть View (можно и null :) )
●
Параметры метода inflate(int, ViewGroup, boolean):
–
id шаблона для fragment;
–
container, в который будет помещён fragment;
–
надо ли привязывать шаблон к container.
18:45
11 из 50
13. Добавление фрагментов в activity
●
Статичное — xml шаблон activity:
–
Для идентификации fragment необходим ID:
●
●
●
18:45
android:id
android:tag
или id контейнера (назначает система)
13 из 50
14. Добавление фрагментов в activity
●
Статичное — xml шаблон activity
●
Динамическое — из кода activity:
–
Получить доступ к FragmentManager.
–
Выполнить FragmentTransaction.
–
add(Fragment, String);
–
не вызывается onCreateView().
18:45
14 из 50
15. Управление фрагментами
●
getFragmentManager() в activity.
●
Получить доступ к созданным ранее fragment:
–
–
●
findFragmentByID();
findFragmentByTag();
Убрать последний fragment из BackStack:
–
●
popBackStack();
Добавить обработчик BackStack:
–
18:45
addBackStackChangeListener();
15 из 50
16. Операции с фрагментами
●
beginTransaction() у FragmentManager.
●
Набор изменений — одна операция (transaction).
●
Возможные изменения:
–
add()
–
remove()
–
replace()
●
Завершение операции методом commit().
●
Сохранение операций в BackStack.
–
18:45
addToBackStack().
16 из 50
17. Операции с фрагментами
// Создание нового фрагмента и операции
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
18. Взаимодействие с фрагментами
●
В фрагменте: getActivity().
●
В activity: getFragmentManager().findFragmentById().
●
Передача событий в activity():
18:45
18 из 50
19. Взаимодействие с 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
23. ActionBar
●
Предоставляет удобный способ навигации
●
Быстрый доступ к важным действиям
●
Добавлен в API Level 11 (Android 3.0)
●
Доступен в SupportLibrary (API Level 7)
18:45
23 из 50
24. Добавление ActionBar
●
●
●
Activity наследуется от ActionBarActivity
Наследевание темы приложения от Theme.AppCompat
(или ThemeHolo)
Обращение через getSupportActionBar(); (getActionBar())
18:45
24 из 50
26. Добавление действий в ActionBar
●
Создание xml-файла меню.
●
Переопределение метода onCreateOptionsMenu():
18:45
26 из 50
27. Добавление действий в ActionBar
●
Создание xml-файла меню.
●
Переопределение метода onCreateOptionsMenu().
●
Отображение действия в виде кнопки в ActionBar:
18:45
27 из 50
46. Создание Drawer
●
Создать шаблон с DrawerLayout
●
Инициализировать список элементов Drawer
●
Обрабатывать нажатия на элементы списка
18:45
46 из 50