Разница между 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является фрагмент класса в родной версии Android SDK. Он был представлен в 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

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-файла приложения. Код библиотеки поддержки будет помещен в ваш 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библиотеку в свой проект, чтобы поддерживать более старые версии Android API (Android 3.x).


2

android.support.v4.app.Fragment библиотека, которую вы можете использовать для обратной совместимости с более старой версией API.

Фрагменты были добавлены на уровне API 11 (наряду с другими функциями), вы должны включить эту библиотеку, чтобы расширить эти функции до устройств, предшествующих 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.