Зачем использовать фрагменты Android?


15

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

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

Фрагменты создаются для того, чтобы:

  1. разрешить Activityиспользовать много фрагментов, переключаться между ними, повторно использовать эти блоки ... ==> Fragmentполностью зависит Contextот действия, поэтому, если мне нужно что-то общее, что я могу повторно использовать и обрабатывать во многих действиях, я могу создавать свои собственные пользовательские макеты или представления ... Я не буду заботиться об этом дополнительном слое разработки сложности, который будут добавлять фрагменты.

  2. лучшая обработка для другого разрешения ==> ОК для планшетов / телефонов в случае длительного процесса, когда мы можем показать два (или более) фрагмента в одной и той же операции в планшетах и ​​один за другим в телефонах. Но почему я всегда использовал фрагменты ?

  3. обработка обратных вызовов для навигации между фрагментами (то есть: если пользователь вошел в систему, я покажу фрагмент, а я покажу другой фрагмент). ===> Просто попробуйте посмотреть, сколько ошибок есть в Facebook SDK Log-in из-за этого, чтобы понять, что это действительно (?) ...

  4. учитывая, что Android-приложение основано на Деятельностях ... Добавление других жизненных циклов в Деятельности было бы лучше для разработки Приложения ... Я имею в виду, что модули, сценарии, управление данными и связность были бы лучше разработаны, в этом путь. ===> Это ответ того, кто привык видеть Android SDK и Android Framework с видением фрагментов. Я не думаю, что это неправильно, но я не уверен, что это даст хорошие результаты ... И это действительно абстрактно ...

====> Зачем мне усложнять свою жизнь, больше программировать, использовать их всегда? иначе, почему это лучший метод, если в некоторых случаях это просто инструмент? каковы эти случаи?


1
Непонятно, о чем вы спрашиваете, не могли бы вы обобщить вопрос, может быть, ниже перечисления предполагаемых преимуществ и вашей критики каждого из них?
Журнал

Я добавил подробный вопрос.
ahmed_khan_89

Я потерян как @logc. Как бы вы справились с этими случаями без фрагментов?
Неонтапир

Я дал то, что сделал бы без фрагментов: (1) создание пользовательских общих элементов управления и их повторное использование там, где я хочу (2), используя 2 действия и переход с помощью startActivityForResult, или просто переключаясь между представлениями (показ / скрытие, надувание / удаление ...) без так много кодирования ... (3) вы можете использовать обратный вызов даже в Деятельности с представлениями (4) Это абстрактный ответ, который я всегда получаю, когда обсуждаю эту тему ... который нуждается в дополнительном объяснении ...
ahmed_khan_89

1
Хм. Эти вопросы и ответы показывают ограничение дизайна stackexchange, где оригинальный постер выбирает «лучший» ответ. (В отличие от slant.co, где все голосуют.) Не идеально для такого широкого вопроса, как этот. Здесь смутный вопрос получает приемлемый ответ, который, очевидно, согласуется с тем, что хотел услышать спрашивающий. Если вы не видите причин использовать фрагмент в вашей ситуации, то не делайте этого. Лучше было бы спросить плюсы и минусы фрагмента против активности . И есть много тем на эту тему.
ToolmakerSteve

Ответы:


5

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

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

Сейчас...

====> Зачем мне усложнять свою жизнь, кодируя больше ... ??

Хотя это и рекомендуется, вам это не нужно, если только вы не планируете управлять жизненным циклом отдельных элементов и / или повторно использовать состояние стека или историю предыдущих представлений.


5

Если есть вариант использования «шлюза» для скептиков фрагментов, это, вероятно, диалоги. Длинноволновый устаревшие методы showDialog(...), onCreateDialog(...)и т.д., были хороши в том , что рамки будут называть их автоматически уничтожать и воссоздавать диалоги , когда хостинг активность была разрушена и воссоздана. Если вы создаете свои собственные диалоги напрямую, вы должны сами управлять всем этим. Но если вы используете a DialogFragment, вы можете еще раз позволить фреймворку управлять ими за вас. В этом случае фрагменты могут значительно упростить ваше кодирование.


1

Я задавал этот вопрос более года назад.

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

Прежде всего, я хочу сказать, что использование фрагментов - это всего лишь вариант, и это будет рефлексом для его рассмотрения, как только вы начнете их использовать.

Преимущества:

1 / это помогает модулировать код, где вы можете иметь полный поток в одном действии, в отдельных фрагментах. Пример: + список / сетка и детализация, + логин и регистрация, забыть пароль, + и т. Д. Это здорово получить код многократного использования, который вы всегда можете скопировать и вставить в разные проекты.

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

3 / вы можете управлять потоком своих фрагментов по событиям и слушателям из Activity.

4 / стопка ваших фрагментов в вашей деятельности.

5 / Используйте одну и ту же панель действий на многих экранах.

И много других...

Иногда я все еще использую Activity как единственный контейнер, особенно для случая с камерой. Некоторые API Android и некоторые сторонние библиотеки нелегко реализовать фрагментарно.

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

Я надеюсь, что это может помочь !!!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.