Фрагменты Android.app против android.support.v4.app с использованием ViewPager?

182

У меня вопрос относительно библиотек поддержки Android, фрагментов и, в качестве конкретного примера, ViewPagerкласса. Я намерен создать приложение с функциональностью, аналогичной образцу, представленному на веб-сайте разработчика Android ( http://developer.android.com/training/animation/screen-slide.html или http://developer.android.com/. обучение / реализация-навигация / lateral.html ). Заглянув в их код, я заметил, что они используют android.support.v4.appбиблиотеку, которая, согласно моим исследованиям, является единственным способом получить доступ к ViewPagerклассу.

В моей ситуации меня не интересует обратная совместимость. Минимальный уровень API - 14 (Ice Cream Sandwich), а цель сборки - 4.2 Jelly Bean. В простейшей форме мое приложение работает точно так же, как и вторая демонстрация, на которую я указал на веб-сайте разработчиков Android - просто пролистываю между тремя вкладками с содержимым в каждой.

Все статьи / сообщения / ответы, которые я прочитал, в значительной степени отдают предпочтение библиотеке поддержки v4 . Теперь для моего, хотя и длинного, вопроса (ов):

  1. Как лучше всего структурировать мое приложение - используя android.support.v4.appи, следовательно, использовать SupportFragments, или использовать фрагменты, предоставленные в android.app- и почему?

  2. Если «Фрагменты из» android.app- это лучший вариант, то каков оптимальный подход ViewPagers?

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

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

Джонстафф
источник
1
вы не можете использовать, Fragmentsесли используете, ViewPagerвам необходимо использовать библиотеку поддержкиSupportFragment
tyczj 09
1
SupportFragmentне является классом в Android SDK ...
Каракури
2
@Karakuri Извините за путаницу; Я не имею в виду буквальный класс SupportFragment, я просто имею в виду Fragmentкласс, доступный в android.support.v4.app.
jonstaff 09
@jonstaff в любом случае вы можете использовать только класс фрагмента в библиотеке поддержки
tyczj 09
@tyczj Спасибо, но это не совсем ответ на вопрос. Я не смотрю больше для почему , так как я уже знаю , что нет ViewPagerв android.app.
jonstaff 09

Ответы:

183

Вы можете использовать ViewPagerнативные фрагменты из android.appпакета с адаптерами из пакета android.support.v13.app . Для этого вы должны использовать банку поддержки v13.

Есть две версии адаптеров, с которыми работают ViewPager: те, что в v4пакете, предназначены для использования с вспомогательными фрагментами, а те , что находятся v13с собственными фрагментами.

Причина, по которой сейчас существует две реализации фрагментов, является исторической: фрагменты в android.appпакете были представлены с Android 3 только для планшетов, а библиотека поддержки была создана для передачи фрагментов на телефоны с более старыми версиями. На Android 4 есть и то, и другое.

Исходя из собственного опыта, я бы рекомендовал использовать фрагменты поддержки даже при разработке для Android 4. Вот несколько причин: Фрагмент или Фрагмент поддержки?

Brillenheini
источник
3
Спасибо тебе за это! Я знаю, что опаздываю на вечеринку, но этот ответ мне очень помог.
Кайл
support.v13 работает для ViewPager ... пока вы не попытаетесь использовать ViewPager в DialogFragment :-(
SteelBytes
android.appнет, FragmentPagerAdapterзначит, стало невозможно использовать viewpager с android.app.Fragment? есть идеи здесь? есть ли опция для просмотра старого пейджера? Чтобы динамически перехватить фрагмент для заданных вкладок
Nikhil
@Nikhil есть две версии FragmentPagerAdapter. Один в android.support.v4.appпакете работает с опорными фрагментами, другой - android.support.v13.appс «нормальными» фрагментами
brillenheini
Я надеялся использовать v13, чтобы избежать использования v4. Оказывается, v4 является зависимостью от v13, так что я мог бы также использовать пейджер поддержки фрагментов / просмотра.
Vas
3

android.app.Fragmentclass устарел с Android P ( ссылка ), поэтому его android.support.v4.app.Fragmentследует использовать везде.

Артём
источник
1

Если вы собираетесь настроить таргетинг на API 11+, вам не понадобится библиотека поддержки (и ваш фактический apk будет, по крайней мере, меньше).

Если вы хотите поддерживать что-либо до Android 3.x, вам понадобится библиотека поддержки.

Вы об этом спрашиваете?

Мэтт
источник
9
вам нужно использовать библиотеку поддержки, чтобы использовать ViewPager, о чем он и спрашивает
tyczj
@Matt Спасибо за ваш ответ, но я ищу лучшее решение, включающее ViewPagerфункциональные возможности, и объяснение, почему это решение лучше всего.
jonstaff 09