Фрагменти 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 (сендвіч з морозивом), а ціль складання - 4,2 Jelly Bean. У своїй найпростішій формі моя програма виконує точно так само, як і друга демонстрація, яку я пов’язав на веб-сайті Android Dev - просто переходив між трьома вкладками зі вмістом у кожній.

Всі статті / публікації / відповіді, які я читав, здаються, що сильно сприяють бібліотеці підтримки v4 . Тепер для моїх, хоч і довготермінових, питань:

  1. Який найкращий спосіб структурувати мою програму - використовуючи android.support.v4.appта тим самим використовуючи SupportFragments або використовуючи фрагменти, надані в android.app- і чому?

  2. Якщо "Фрагменти з" android.app- це шлях, який є оптимальним способом підходу ViewPagers?

  3. Якщо підтримка фрагментів найкраще підходить до завдання, я вважаю, що вони мають таку ж функціональність, як і інші - тож яка мета їх взагалі android.app?

Сподіваюсь, хтось із чіткішим розумінням може дати мені трохи роз’яснень, тому що я заблукав…


1
ви не можете використовувати, Fragmentsякщо ви використовуєте, ViewPagerвам потрібно використовувати бібліотеку підтримкиSupportFragment
tyczj

1
SupportFragmentне є класом в Android SDK ...
Karakuri

2
@Karakuri Вибачте за плутанину; Я не маю на увазі буквальний клас SupportFragment, я просто маю на увазі Fragmentклас, доступний в android.support.v4.app.
jonstaff

У будь-якому випадку @jonstaff ви можете використовувати лише клас фрагментів у бібліотеці підтримки
tyczj

@tyczj Дякую, але це не дуже відповідає на питання. Я шукаю більше чому , оскільки я вже знаю, що немає ViewPagerв android.app.
jonstaff

Відповіді:


183

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

Існує дві версії адаптерів, з якими працює ViewPager, причому ті, що v4входять до упаковки, призначені для використання з підтримуючими фрагментами, а ті, що містяться у v13власних фрагментах.

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

З власного досвіду я рекомендую використовувати фрагменти підтримки, навіть при розробці для Android 4. Ось кілька причин: Фрагмент або Фрагмент підтримки?


3
Дякую за це! Я знаю, що я спізнююсь на вечірку, але ця відповідь мені дуже допомогла.
Кайл

support.v13 працює для ViewPager ..., поки ви не спробуєте використовувати ViewPager у DialogFragment :-(
SteelBytes

android.appне FragmentPagerAdapterтак, то неможливо використовувати viewpager з android.app.Fragment? якась ідея тут? чи є варіант для старого пейджера перегляду? Так як динамічно зачепити фрагмент для заданих вкладок
Нікхіл

@Nikhil є дві версії FragmentPagerAdapter. Той, що знаходиться в android.support.v4.appупаковці, працює з підтримкою, а інший android.support.v13.appіз «нормальними» фрагментами
brillenheini

Я сподівався використати v13, щоб я міг уникати використання v4. Виявляється, v4 - це залежність для v13, тому я міг би також використовувати фрагменти підтримки / пейджер перегляду.
Вась

3

android.app.Fragmentклас застарілий, оскільки Android P ( посилання ), тому його android.support.v4.app.Fragmentслід використовувати всюди.


1

Якщо ви збираєтесь націлити API 11+, вам не знадобиться бібліотека підтримки [і фактична apk буде менше, принаймні).

Якщо ви хочете підтримати що-небудь перед Android 3.x, вам знадобиться бібліотека підтримки.

Це ти просиш?


9
вам потрібно використовувати бібліотеку підтримки, щоб використовувати ViewPager, про що він запитує
tyczj

@Matt Дякую за вашу відповідь, але я шукаю найкраще рішення, яке включає ViewPagerфункціональність та пояснення, чому саме це рішення найкраще.
jonstaff
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.