it-swarm.com.ru

Почему фрагменты и когда использовать фрагменты вместо действий?

В Android API 11+ Google выпустил новый класс с именем Fragment.

В видео Google предлагает, чтобы, когда это возможно ( link1 , link2 ), мы использовали фрагменты вместо действий, но они не объяснили почему.

Какова цель фрагментов и их возможное использование (кроме некоторых примеров пользовательского интерфейса, которые могут быть легко достигнуты с помощью простых представлений/макетов)?

Мой вопрос о фрагментах:

  1. Каковы цели использования фрагмента?
  2. Каковы преимущества и недостатки использования фрагментов по сравнению с использованием действий/представлений/макетов?

Бонусные вопросы:

  1. Можете ли вы дать некоторые действительно интересные использования для фрагментов? Вещи, которые Google не упомянул в своих видео?
  2. Как лучше всего общаться между фрагментами и действиями, которые их содержат?
  3. Что нужно помнить, когда вы используете фрагменты? Какие-нибудь советы и предупреждения из вашего опыта?
428
android developer

# 1 и # 2 каковы цели использования фрагмента и каковы преимущества и недостатки использования фрагментов по сравнению с использованием действий/представлений/макетов?

Фрагменты - это решение Android для создания пользовательских интерфейсов многократного использования. Вы можете достичь некоторых из тех же результатов, используя действия и макеты (например, используя include). Тем не мение; фрагменты подключаются к API Android, от HoneyComb и выше. Позвольте мне уточнить;

  • ActionBar. Если вам нужны вкладки для навигации по вашему приложению, вы быстро увидите, что интерфейс ActionBar.TabListener дает вам FragmentTransaction в качестве входного аргумента для метода onTabSelected. Возможно, вы могли бы игнорировать это, и делать что-то еще и умнее, но вы будете работать против API, а не с этим.

  • FragmentManager очень умно обрабатывает "назад". Назад не означает возвращение к последнему занятию, как для обычных занятий. Это значит вернуться к предыдущему состоянию фрагмента.

  • Вы можете использовать классное ViewPager с FragmentPagerAdapter для создания интерфейсов смахивания. Код FragmentPagerAdapter намного чище, чем обычный адаптер, и он управляет созданием отдельных фрагментов.

  • Ваша жизнь станет намного проще, если вы будете использовать Фрагменты, когда будете пытаться создавать приложения для телефонов и планшетов. Поскольку фрагменты тесно связаны с API-интерфейсами Honeycomb +, вы захотите использовать их и на телефонах для повторного использования кода. Вот где библиотека совместимости пригодится.

  • Вы даже можете и должны использовать фрагменты для приложений, предназначенных только для телефонов. Если вы думаете о переносимости. Я использую ActionBarSherlock и библиотеки совместимости для создания "ICS-выглядящих" приложений, которые выглядят одинаково вплоть до версии 1.6. Вы получаете последние функции, такие как ActionBar, с вкладками, переполнением, разделенной панелью действий, пейджером и т.д.

Бонус 2

Лучший способ общения между фрагментами - это намерения. Когда вы нажимаете что-то во фрагменте, вы обычно вызываете StartActivity() с данными на нем. Намерение передается всем фрагментам действия, которое вы запускаете.

260
Glenn Bech

Не уверен, на какие видео вы ссылаетесь, но я сомневаюсь, что они говорят, что вы должны использовать фрагменты вместо действий, потому что они не являются взаимозаменяемыми. На самом деле в Руководстве разработчика есть довольно подробное описание , попробуйте прочитать его для получения подробной информации.

Короче говоря, фрагменты живут внутри действий, и каждое действие может содержать множество фрагментов. Как и действия, они имеют определенный жизненный цикл, в отличие от действий, они не являются компонентами приложений верхнего уровня. Преимущества фрагментов включают повторное использование кода и модульность (например, использование одного и того же представления списка во многих действиях), в том числе возможность создания многопанельных интерфейсов (в основном это полезно на планшетах). Основным недостатком является (некоторая) дополнительная сложность. Как правило, вы можете добиться того же с помощью (пользовательских) представлений нестандартным и менее надежным способом.

67
Nikolay Elenkov

Фрагмент - это часть пользовательского интерфейса или поведения приложения, которая может быть размещена в Activity, что позволяет создать более модульный дизайн деятельности. Это не будет неправильно, если мы скажем, что фрагмент является своего рода субактивностью.

Ниже приведены важные моменты о фрагменте:

  1. Фрагмент имеет свою собственную разметку и свое собственное поведение со своими собственными обратными вызовами жизненного цикла.

  2. Вы можете добавлять или удалять фрагменты в действии во время его выполнения.

  3. Вы можете объединить несколько фрагментов в одном действии для создания многопанельного пользовательского интерфейса.

  4. Фрагмент может быть использован в нескольких видах деятельности.

  5. Жизненный цикл фрагмента тесно связан с жизненным циклом активности хоста.

  6. Когда действие приостановлено, все фрагменты, доступные в активности, также будут остановлены.

  7. Фрагмент может реализовать поведение, которое не имеет компонента пользовательского интерфейса.

  8. Фрагменты были добавлены в API Android в Android (Сота) с API версии 11.

Для получения более подробной информации, пожалуйста, посетите официальный сайт, Фрагменты.

44
mani

Это важная информация, которую я нашел на фрагментах:

Исторически каждый экран в приложении Android был реализован как отдельное действие. Это создает проблему при передаче информации между экранами, поскольку механизм намерения Android не позволяет передавать ссылочный тип (т.е. объект) непосредственно между операциями. Вместо этого объект должен быть сериализован или должна быть доступна глобально доступная ссылка.

Делая каждый экран отдельным фрагментом, эта головная боль при передаче данных полностью исключается. Фрагменты всегда существуют в контексте данного действия и всегда могут получить доступ к этому действию. Сохраняя интересующую информацию в Деятельности, Фрагмент для каждого экрана может просто получить доступ к ссылке на объект через Мероприятие.

Источник: https://www.pluralsight.com/blog/software-development/Android-fragments

16
Kaveesh Kanwal

Фрагменты особенно полезны в некоторых случаях, например, когда мы хотим сохранить навигационный ящик на всех наших страницах. Вы можете надуть макет кадра любым фрагментом, который вам нужен, и при этом иметь доступ к блоку навигации.

Если бы вы использовали какое-либо действие, вам пришлось бы хранить ящик во всех действиях, что создает избыточный код. Это одно интересное использование фрагмента.

Я новичок в Android и ​​все еще думаю, что фрагмент полезен для этого.

7
Nithin Baby

Я знаю, что это уже обсуждалось до смерти, но я хотел бы добавить еще несколько моментов:

  • Фрагменты могут использоваться для заполнения Menus и могут обрабатывать MenuItem клики самостоятельно. Таким образом, давая дополнительные возможности модуляции для вашей деятельности. Вы можете выполнять работу с ContextualActionBar и т.д., Не подозревая об этом свою деятельность и, в принципе, можно отделить ее от основной вещи, которую обрабатывает ваша деятельность (Навигация/Настройки/О программе).

  • Родительский Frag с дочерними Frags может дать вам дополнительные возможности для модуляции ваших компонентов. Например. Вы можете легко менять местами фраги, помещать новые фраги в пейджер или удалять их, переставлять их. Все без вашей Деятельности, ничего не зная об этом, просто сосредоточившись на вещах более высокого уровня.

4
einschnaehkeee

Действия - это полноэкранные компоненты в приложении с панелью инструментов, все остальное предпочтительно фрагменты. Одно полноэкранное родительское действие с панелью инструментов может иметь несколько панелей, прокручиваемых страниц, диалогов и т.д. (Все фрагменты), все из которых могут быть доступны из родителя и взаимодействовать через родителя.

Пример:

Деятельность A, Деятельность B, Деятельность C:

  • Все действия должны повторяться в одном и том же коде, например, для отображения базовой панели инструментов, или наследоваться от родительского действия (управление становится громоздким).
  • Чтобы перейти от одного действия к другому, либо все они должны находиться в памяти (накладные расходы), либо одно должно быть уничтожено, чтобы открылось другое.
  • Связь между действиями может быть сделана через Intents.

против

Занятие А, Фрагмент 1, Фрагмент 2, Фрагмент 3:

  • Нет повторения кода, все экраны имеют панели инструментов и т.д. Из этого одного действия.
  • Несколько способов перехода от одного фрагмента к следующему - просмотр пейджера, мультипанель и т.д.
  • Активность содержит большую часть данных, поэтому необходимо минимальное взаимодействие между фрагментами. Если все еще необходимо, может быть сделано через интерфейсы легко.
  • Фрагменты не должны быть полноэкранными, большая гибкость при их создании.
  • Фрагменты не нужно раздувать макет, если представления не нужны.
  • Несколько действий могут использовать один и тот же фрагмент.
1
Chandrima Bhattacharjee

Фрагмент живет внутри деятельности.

Пока деятельность живет сама по себе.

0
superkytoz

Фрагменты живут в Деятельности и имеют:

  • свой жизненный цикл
  • свой макет
  • свои дочерние фрагменты и пр.

Думайте о Фрагментах как о подгруппе основного вида деятельности, к которой он принадлежит, он не может существовать самостоятельно и его можно вызывать/использовать снова и снова. Надеюсь это поможет :)

0
maniix

1. Цели использования фрагмента?

  • Ans:
    1. Обработка различий в форм-факторе устройства.
    2. Передача информации между экранами приложений.
    3. Организация пользовательского интерфейса.
    4. Расширенные метафоры пользовательского интерфейса.
0
Prithiv Dharmaraj