it-swarm.com.ru

Одна активность и все остальные фрагменты

Я думаю о реализации одного экрана с Activity и всех других экранов с Fragments и managing all the fragments thru the activity.

Это хорошая идея? и мой ответ НЕТ но все же я хочу узнать более четко об этой мысли.

Каковы плюсы и минусы идеи?

Примечание:

Пожалуйста, не дайте мне ссылку на фрагмент и активность.

EDIT:

Вот кое-что над Фрагментами и деятельностью:

За:

  1. Фрагменты предназначены для использования с действиями в качестве вспомогательного действия.
  2. Фрагменты не являются заменой деятельности.
  3. Фрагменты предназначены для повторного использования (необходимо знать, каким образом можно обеспечить повторное использование.).
  4. Фрагменты - лучший способ написать код для поддержки как планшетов, так и телефонов.

Против:

  1. Нам нужно реализовать интерфейс для получения данных из фрагментов.
  2. Для диалога мы должны пройти долгий путь, чтобы показать это.

Зачем нам использовать фрагменты, если мы не рассматриваем таблетки? Какая разница во времени между активностью и фрагментом?

156
Vineet Shukla

Это зависит от приложения, которое вы создаете. Я создал несколько приложений с использованием обоих подходов и не могу сказать, что один способ всегда лучше другого. В последнем приложении, которое я создал, я использовал единый подход Activity и навигацию в стиле Facebook. При выборе элементов из списка навигации я обновляю один контейнер Fragment для отображения этого раздела.

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

То, что Аравинд говорит о привязанности к одному типу Activity, также верно, но на самом деле это не то ограничение. Ваша деятельность будет FragmentActivity, и если вам не нужно MapView, то никаких реальных ограничений нет. Однако если вы хотите отображать карты, это можно сделать, но вам нужно либо изменить библиотеку совместимости Android, чтобы FragmentActivity extension MapActivity, либо использовать общедоступную поддержка Android) -v4-GoogleMaps .

В конечном счете, большинство разработчиков, которых я знаю, которые пошли по одному пути Activity, вернулись к нескольким действиям, чтобы упростить свой код. UI мудро, на планшете, вы иногда застреваете, используя одно Activity только для того, чтобы добиться какого-то безумного взаимодействия, придуманного вашими дизайнерами :)

-- Правка --

Google наконец-то выпустил MapFragment в библиотеку совместимости, поэтому вам больше не нужно использовать хак Android-support-v4-googlemaps. Подробнее об обновлении читайте здесь: Google Maps Android API v2

- Правка 2 -

Я только что прочитал этот великолепный пост о современном (2017 г.) состоянии фрагментов и вспомнил этот старый ответ. Мысль, которой я поделюсь: Фрагменты: решение всех проблем Android

91
JustinMorris

Я собираюсь закончить проект (5 месяцев в разработке), который имеет 1 действие и 17 фрагментов, все на весь экран. Это мой второй проект на основе фрагментов (предыдущий был 4 месяца).

За

  • Основным видом деятельности является 700 строк кода, просто красиво управляя порядком навигации по фрагментам.
  • Каждый фрагмент красиво разделен на собственный класс и относительно небольшой (пара сотен строк пользовательского интерфейса).
  • Руководство может сказать: "Эй, как насчет того, чтобы мы изменили порядок этих экранов", и я могу сделать это очень легко, так как эти фрагменты не зависят друг от друга, все они общаются через действие. Мне не нужно копаться в отдельных действиях, чтобы найти, где они называют друг друга.
  • мое приложение очень сильно загружено графикой и никогда не будет работать как 1 экран 1 действие. Все эти вспомогательные действия в памяти приводят к тому, что приложению все время не хватает памяти, поэтому мне придется finish() всех невидимых действий и создать ту же логику управления для навигации, что и для фрагментов. Можно сделать это с фрагментами только из-за этого.
  • если мы когда-нибудь сделаем приложение для планшета, у нас будет время перефакторинга, потому что все уже хорошо разделено.

Против

  • вы должны научиться использовать фрагменты
83
Tamas

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

Что на самом деле обеспечивают действия и фрагменты?

  1. События жизненного цикла и backstack
  2. Контекст и ресурсы

Поэтому используйте их для этого, ТОЛЬКО. У них достаточно ответственности, не усложняйте их. Я бы сказал, что даже создание TextView в Activity или Fragment является плохой практикой. Есть причина, по которой методы, такие как public View findViewById (int id) являются PUBLIC.

Теперь вопрос становится проще: нужно ли мне несколько независимых событий жизненного цикла и backstacks? Если вы думаете, что да, возможно, используйте фрагменты. Если вы никогда не думаете, не используйте фрагменты.

В конце концов, вы можете сделать свой собственный backstack и жизненные циклы. Но зачем воссоздавать колесо?

Правка: Зачем голосовать против? Одноразовые занятия людей! Каждое действие или фрагмент должны иметь возможность создавать презентатора, который создает представление. Презентатор и представление являются модулем, который можно взаимозаменять. Почему за действия или фрагменты отвечает ведущий?

16
beplaya

Pros

Вы можете контролировать свои фрагменты из одного действия, потому что все фрагменты независимы друг от друга. Фрагменты имеют свой собственный жизненный цикл (onPause, onCreate, onStart...). Имея жизненный цикл, фрагменты могут независимо реагировать на события, сохранять свое состояние с помощью onSaveInstanceState и возвращаться (например, при возобновлении после входящего вызова или когда пользователь нажимает кнопку возврата).

Cons

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

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

12
Sahil Mahajan Mj

Это зависит от дизайна вашего приложения. Предположим, что если вы используете вкладки в ActionBar в макете дизайна, то в Single Activity приложения можно изменить фрагменты при нажатии Tab. Итак, теперь у вас есть Activity и, скажем, предположим, что в ActionBar есть три вкладки, и представление для вкладок, предоставляемых фрагментами, облегчает управление плюсом. Итак, все зависит от схемы дизайна вашего приложения и от того, как вы принимаете решение о его создании.

2
ASH

Плюсы:

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

Минусы:

  • Требуется более сложный код в вашей деятельности.

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

1
Ski

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

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

0
user1679130