В Android API 11+ Google выпустил новый класс под названием Fragment
.
В видео Google предлагает, чтобы, когда это возможно ( ссылка 1 , ссылка 2 ), мы использовали фрагменты вместо действий, но они точно не объясняли, почему.
Какова цель фрагментов и их возможное использование (кроме некоторых примеров пользовательского интерфейса, которые могут быть легко достигнуты с помощью простых представлений / макетов)?
Мой вопрос о фрагментах:
- Каковы цели использования фрагмента?
- Каковы преимущества и недостатки использования фрагментов по сравнению с использованием действий / представлений / макетов?
Бонусные вопросы:
- Можете ли вы дать некоторые действительно интересные использования для фрагментов? Вещи, которые Google не упомянул в своих видео?
- Как лучше всего общаться между фрагментами и действиями, которые их содержат?
- Что нужно помнить при использовании фрагментов? Какие-нибудь советы и предупреждения из вашего опыта?
android
android-layout
android-fragments
android-activity
android-3.0-honeycomb
разработчик Android
источник
источник
Ответы:
Фрагменты - это решение Android для создания пользовательских интерфейсов многократного использования. Вы можете достичь некоторых из тех же результатов, используя действия и макеты (например, используя include). Однако; фрагменты подключены к Android API, от HoneyComb и выше. Позвольте мне уточнить;
ActionBar
. Если вам нужны вкладки для навигации по вашему приложению, вы быстро увидите, чтоActionBar.TabListener
интерфейс дает вамFragmentTransaction
входной аргумент дляonTabSelected
метода. Возможно, вы могли бы игнорировать это, и делать что-то еще и умнее, но вы будете работать против API, а не с этим.FragmentManager
Ручками «назад» для вас в очень умным способом. Вернуться не означает вернуться к последнему занятию, как к обычным занятиям. Это значит вернуться к предыдущему состоянию фрагмента.Вы можете использовать кул
ViewPager
сFragmentPagerAdapter
для создания интерфейсов смахивания.FragmentPagerAdapter
Код намного чище , чем обычный адаптер, и он контролирует инстанциацию отдельных фрагментов.Ваша жизнь станет намного проще, если вы будете использовать Фрагменты, когда будете пытаться создавать приложения для телефонов и планшетов. Поскольку фрагменты тесно связаны с API-интерфейсами Honeycomb +, вы захотите использовать их и на телефонах для повторного использования кода. Вот где библиотека совместимости пригодится.
Вы даже можете и должны использовать фрагменты для приложений, предназначенных только для телефонов. Если вы думаете о переносимости. Я использую
ActionBarSherlock
библиотеки совместимости для создания «ICS-выглядящих» приложений, которые выглядят одинаково вплоть до версии 1.6. Вы получаете новейшие функции, такие какActionBar
: вкладки, переполнение, панель разделенных действий, панель просмотра и т. Д.Лучший способ общения между фрагментами - это намерения. Когда вы нажимаете что-то во фрагменте, вы обычно звоните
StartActivity()
с данными на нем. Намерение передается всем фрагментам действия, которое вы запускаете.источник
Не уверен, на какие видео вы ссылаетесь, но я сомневаюсь, что они говорят, что вы должны использовать фрагменты вместо действий, потому что они не являются взаимозаменяемыми. На самом деле в Руководстве для разработчиков есть довольно подробная запись, попробуйте прочитать ее подробнее.
Короче говоря, фрагменты живут внутри действий, и каждое действие может содержать много фрагментов. Как и действия, они имеют определенный жизненный цикл, в отличие от действий, они не являются компонентами приложений верхнего уровня. Преимущества фрагментов включают повторное использование кода и модульность (например, использование одного и того же представления списка во многих действиях), в том числе возможность создания многопанельных интерфейсов (в основном это полезно на планшетах). Основным недостатком является (некоторая) дополнительная сложность. Как правило, вы можете добиться того же с помощью (пользовательских) представлений нестандартным и менее надежным способом.
источник
Фрагмент - это часть пользовательского интерфейса или поведения приложения, которая может быть размещена в Activity, что позволяет создать более модульный дизайн деятельности. Это не будет неправильно, если мы скажем, что фрагмент является своего рода субактивностью.
Ниже приведены важные моменты о фрагменте:
Фрагмент имеет свою собственную разметку и свое собственное поведение со своими собственными обратными вызовами жизненного цикла.
Вы можете добавлять или удалять фрагменты в действии во время его выполнения.
Вы можете объединить несколько фрагментов в одном действии для создания многопанельного пользовательского интерфейса.
Фрагмент может быть использован в нескольких видах деятельности.
Жизненный цикл фрагмента тесно связан с жизненным циклом активности хоста.
Когда действие приостановлено, все фрагменты, доступные в активности, также будут остановлены.
Фрагмент может реализовать поведение, которое не имеет компонента пользовательского интерфейса.
Фрагменты были добавлены в Android API в Android 3 (Honeycomb) с API версии 11.
Для более подробной информации, пожалуйста, посетите официальный сайт, Фрагменты .
источник
Это важная информация, которую я нашел на фрагментах:
Источник: https://www.pluralsight.com/blog/software-development/android-fragments
источник
Действия - это полноэкранные компоненты в приложении с панелью инструментов, все остальное предпочтительно фрагменты. Одно полноэкранное родительское действие с панелью инструментов может иметь несколько панелей, прокручиваемых страниц, диалогов и т. Д. (Все фрагменты), все из которых могут быть доступны из родителя и взаимодействовать через родителя.
Пример:
Деятельность A, Деятельность B, Деятельность C:
против
Деятельность А, Фрагмент 1, Фрагмент 2, Фрагмент 3:
источник
Фрагменты особенно полезны в некоторых случаях, например, когда мы хотим сохранить навигационный ящик на всех наших страницах. Вы можете надуть макет кадра любым фрагментом, который вам нужен, и при этом иметь доступ к блоку навигации.
Если бы вы использовали какое-либо действие, вам пришлось бы хранить ящик во всех действиях, что создает избыточный код. Это одно интересное использование фрагмента.
Я новичок в Android и до сих пор думаю, что фрагмент полезен таким образом.
источник
Я знаю, что это уже обсуждалось до смерти, но я хотел бы добавить еще несколько моментов:
Фрагменты могут использоваться для заполнения
Menu
s и могут обрабатыватьMenuItem
клики самостоятельно. Таким образом, давая дополнительные возможности модуляции для вашей деятельности. Вы можете выполнять работу с ContextualActionBar и т. Д., Не подозревая об этом свою деятельность и, в принципе, можно отделить ее от основной вещи, которую обрабатывает ваша деятельность (Навигация / Настройки / О программе).Родительский Frag с дочерними Frags может дать вам дополнительные возможности для модуляции ваших компонентов. Например, вы можете легко менять местами фраги, помещать новые фраги в пейджер или удалять их, переставлять их. Все без вашей Деятельности, ничего не зная об этом, просто сосредоточившись на вещах более высокого уровня.
источник
Фрагменты живут в Деятельности и имеют:
Думайте о Фрагментах как о подгруппе основной деятельности, к которой он принадлежит, он не может существовать сам по себе и его можно вызывать / использовать снова и снова. Надеюсь это поможет :)
источник
1. Цели использования фрагмента?
источник
Фрагмент живет внутри деятельности, а деятельность живет сама по себе.
источник