Фрагментировать или не фрагментировать?

Поскольку я начал использовать Fragments все больше и больше, но также, поскольку функциональность Фрагментов увеличена (Фрагменты во Фрагментах, MapFragments), я начинаю доходить до точки, где мне нужно определить, когда я должен создать новый View/Action как фрагмент или как активность?

Действие определяется как:

Активность - это единственная, сфокусированная вещь, которую пользователь может сделать.

Но Фрагменты скорее приняли это определение, как описано в документах:

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

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

Итак, мне бы хотелось, чтобы какой-то ввод/помощь выяснял, какой лучший подход решить, должен ли я сделать новое действие/представление как фрагмент или как активность?

Ответ 1

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

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

Ответ 2

Активность определяется как: "Активность - это единая целенаправленная вещь, которую пользователь может сделать"

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

Итак, мне бы хотелось, чтобы какой-то ввод/помощь выяснял, какой лучший подход решить, должен ли я сделать новое действие/представление как фрагмент или как активность?

Вот моя общая эвристика:

  • Если вы ожидаете, что такой-то фрагмент пользовательского интерфейса может существовать автономно на экране размера телефона, но его можно использовать в тандеме с чем-то еще на экране размером с планшет, сделайте его фрагментом.

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

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

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

Но, как указывает jsmith, нет универсального права или неправильного ответа. BTW, AFAIAC, jsmith ответ правильный, но я собирался быть слишком многословным для комментария к его ответу...: -)

Ответ 3

Я развиваюсь в Android с 1.5, поэтому я развиваюсь с довольно продолжительного времени, а также с Fragments.

Довольно часто фрагменты оставляли меня с кислым вкусом в моем рту... Примером тому был то, что мне нужна какая-то разбитая на панели панель с кнопками. Для этого я использовал фрагмент ViewPager + 1 для каждой кнопки. У меня были все проблемы, потому что до того, как фрагменты Android 4.2 не могли быть вложенными.

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

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

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

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