Різниця між android.app.Fragment і android.support.v4.app.Fragment


175

У чому різниця між android.app.Fragmentі android.support.v4.app.Fragment, і які обставини, в яких слід використовувати кожен?

Відповіді:


288

android.support.v4.app.Fragment- це клас Fragment у бібліотеці підтримки для Android, який є пакетом сумісності, який дозволяє використовувати деякі новіші функції Android на старих версіях Android.

android.app.Fragment- клас Fragment у рідній версії SDK для Android. Він був представлений в Android 3 (API 11).

Якщо ви хочете змусити ваш додаток використовувати фрагменти та хочете націлити пристрої перед API 11, ви повинні використовувати android.support.v4.app.Fragment. Однак якщо ви орієнтуєтесь лише на пристрої, на яких працює API 11 або вище, ви можете використовувати android.app.Fragment.

Редагувати: вміщена ОС android.app.Fragment тепер застаріла (станом на рівень API 28), і кожен повинен перейти до використання реалізацій бібліотеки підтримки.


4
Також в розділі «Використання FragmentStatePagerAdapter без бібліотеки підтримки»: stackoverflow.com/questions/18512294 / ...
CJBS

Якщо ви перекриєте onAttach (), будь ласка, перегляньте цю тему, щоб уникнути її виклику за певних обставин з android.app.Fragment: stackoverflow.com/questions/32083053/…
Hong

3
буде використовувати Androidx: androidx.fragment.app.Fragment
Abhijit Kurane

56

Станом на 2018 рік:

З android.app.Fragment документації :

Цей клас застарілий у рівні API 28.
Використовуйте Бібліотеку підтримки Fragmentдля послідовної поведінки на всіх пристроях та доступу до життєвого циклу.

Тому фрагменти підтримки ( android.support.v4.app.Fragment) зараз слід використовувати всюди замість власних фрагментів ( android.app.Fragment).


@Artyom, як нооб для розробки Android, я очікував, що коли android.app.Fragmentклас буде застарілим, той рівень API 28 матиме альтернативний, можливо, радикальний підхід заміни. Чи є підхід вперед або це сумісний android.support.v4.app.Fragmentправильний підхід?
ergohack

1
@ergohack Дивіться це саме так: для коду Java ви можете включити байт-код всередину роботи пристрою або всередині файлу jar програми. Код бібліотеки підтримки буде розміщений у вашій банці та надаватиме таку ж функцію, що й код, що виконується, тому немає причин не використовувати сучасну та підтримувану бібліотеку підтримки замість старіння та незбереженого коду вашого цільового телефону.
П’єр

12

Я використовую android.support.v4.app.Fragmentвиключно.

Усі програми, які я пишу, повинні підтримувати Android 2.3, і це найпростіший спосіб зробити це.

Якщо ви підтримуєте 11+, тоді дотримуйтесь android.app.Fragment.


18
У такому випадку ви пропускаєте безліч функцій, які існують у бібліотеці підтримки, але лише у рідній після певного рівня API. Наприклад, getChildFragmentManager () недоступний до рівня 17. Моя порада - використовувати лише фрагменти підтримки та зробити вигляд, що рідного не існує.
Йоган

4

Якщо ваша програма націлена на API 11 або вище, ви можете використовувати android.app.Fragment і ваш файл APK буде меншим.

В іншому випадку додайте android.support.v4.app.Fragmentбібліотеку до свого проекту, щоб підтримувати старіші версії API для Android (Android 3.x).


2

android.support.v4.app.Fragment це бібліотека, яку ви можете використовувати для отримання сумісності з зворотною версією для старшої версії API

Фрагменти додано на рівні 11 API (разом з іншими функціями), ви повинні включити цю бібліотеку, щоб розширити цю функцію на пристрої, що передують API 11. Це корисна бібліотека, і я пропоную ознайомитися з ActionBarSherlock, який розширює панель дій на пристрої, що передують API v11.


-2

Якщо ваша програма націлена на API 11 або вище, ви можете використовувати android.app.Fragment, і це зменшить розмір APK. В іншому випадку використовуйте android.support.v4.app.Fragment

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