Фрагмент или фрагмент поддержки?

Я разрабатываю приложение, поддерживающее Android >= 4.0. Он использует фрагменты из пакета android.app. Поскольку мне приходится сталкиваться с проблемами с более старой версией фрагмента в 4.0, например этот, которые уже исправлены в библиотеке поддержки, я рассматриваю возможность возврата к реализации фрагмента из библиотеку поддержки, чтобы получить более надежную и последовательную реализацию.

Как вы относитесь к этому? Используете ли вы фрагменты из библиотеки поддержки, даже если они уже доступны, при разработке для Android 4?

Ответ 1

Из моего опыта использование одного и того же фрагмента на всех устройствах Android является большим преимуществом. Я не мог избавиться от всех NullPointerExceptions, когда состояние сохранено на Android 4.0 с использованием собственных фрагментов, при этом библиотека поддержки все ушла. Кроме того, пока я не вижу недостатка в этом подходе.

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

Ответ 2

Одна из основных причин придерживаться SupportFragment на некоторое время заключается в том, что у вас нет доступа к ChildFragmentManager до API 17. Библиотека поддержки предоставит вам версию поддержки диспетчера дочерних фрагментов.

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

Ответ 3

Я тоже разочаровался в необходимости включения библиотек поддержки, несмотря на таргетинг на Android 4.0+, но, похоже, это официально рекомендуется:

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

В этом руководстве объясняются важные функции и поддержка версий предоставляемые библиотеками поддержки, чтобы помочь вам решить, кто из вас должен включать в ваше приложение. В целом мы рекомендуем включить библиотеки поддержки v4 и v7 appcompat, поскольку они поддерживают широкий диапазон версий Android и предоставить API для рекомендуемого пользователя интерфейсные шаблоны.

http://developer.android.com/tools/support-library/features.html

Ответ 4

IMHO, если вы планируете разрабатывать только для версии 4.0, я бы порекомендовал идти с родными библиотеками, так как исполняемый файл будет меньше. Это правда, что вы можете столкнуться с проблемами ошибок в ранних версиях, но я думаю, что большинство из них должно быть довольно тривиально для работы. Также предполагается, что библиотека совместимости должна сопоставляться с нативными фрагментами, если вы все равно работаете на 4.0 и выше. Таким образом, вам все равно придется бороться с такими проблемами. Проблема с библиотеками поддержки заключается в том, что у вас есть много классов, которые появляются 2x (один раз в структуре пакета поддержки и один раз в "родной" структуре пакета), что делает разработку более громоздкой.

Однако, если вы хотите также отпустить приложение до 4.0, то нет никакой поддержки в библиотеке поддержки. Кроме того, примерно 38% всех пользователей на 2.3 могут иметь смысл включить эту версию ОС. В таком случае вы можете использовать библиотеку поддержки в сочетании с Jake Wartons ActionBarSherlock (или с помощью googles поддержки библиотеки ActionBar после ее окончательного выпуска).