2013-06-25 1 views
125

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

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

+2

Это хороший вопрос (+1, потому что это заставляет меня любопытно). Также для этого нет хорошего объяснения в Интернете. Я использую библиотеку поддержки для своего приложения, и мне интересно, ошибаюсь я или нет, потому что я не заметил никаких ошибок при компиляции или во время теста. – JJ86

+2

@animuson Ответ от brillenheini доказывает, что это не ответ на основе мнения. – OneWorld

ответ

90

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

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

+11

Итак, в чем же цель «android.app.Fragment»? Если вы можете добавить это к своему ответу [здесь] (http://stackoverflow.com/questions/17553374/android-app-fragments-vs-android-support-v4-app-using-viewpager/) с немного большим объяснением , Я был бы полностью удовлетворен. Благодаря! – jonstaff

+1

@ jonstaff Причина, вероятно, историческая. См. Мой обновленный ответ. – brillenheini

+11

Для полноты, кажется, есть вещи, которые фрагменты поддержки не могут выполнять (например, [анимированные с помощью 'objectAnimator'] (http://stackoverflow.com/a/16734364/11683), даже если фактическая целевая ОС поддерживает его). Который, если вы используете «ViewPager», означает, что вам нужно использовать адаптеры из библиотеки поддержки v13, иначе вы не сможете использовать анимацию для просмотра и воспроизведения. – GSerg

4

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

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

+3

Спасибо за ваш ответ. Поскольку мне нужен ViewPager, я должен включить библиотеку поддержки в любом случае. Кроме того, фрагмент поддержки не пытается переключиться на встроенную реализацию, если таковая имеется. Вот что говорит [docs] (http://developer.android.com/reference/android/support/v4/app/Fragment.html). – brillenheini

+0

Да, вещь (как сказал @brillenheini), чтобы иметь ViewPager вам нужен v4, поэтому, даже если вы нацеливаете только устройства v13 +, вы, скорее всего, закончите с v4. – Sotti

+0

Я только что обнаружил, что тоже (ViewPager требуется v4) на моем API 21 и на приложении. Meh: -/ – mraviator

39

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

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

22

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

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

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

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

+0

Это должен быть принятый ответ, несмотря на то, что @brillenheini предоставил ответ сам. Он отвечает на вопрос с максимальной точностью и лаконичностью. –

0

кажется, что лучше использовать библиотеку поддержки, потому что я видел заявление здесь https://developer.android.com/reference/android/app/Fragment.html

Этот класс был устаревшим в уровне API П. Использование библиотеки Поддержка Фрагмент для согласованного поведения на всех устройствах и доступ к Жизненный цикл.