Diferencia entre android.app.Fragment y android.support.v4.app.Fragment

175

¿Cuál es la diferencia entre android.app.Fragmenty android.support.v4.app.Fragment, y cuáles son las circunstancias en las que cada uno debe usarse?

rayo
fuente

Respuestas:

288

android.support.v4.app.Fragmentes la clase Fragment en la biblioteca de soporte de Android, que es un paquete de compatibilidad que le permite utilizar algunas de las funciones más recientes de Android en versiones anteriores de Android.

android.app.Fragmentes la clase Fragment en la versión nativa del SDK de Android. Fue introducido en Android 3 (API 11).

Si desea hacer que su aplicación use fragmentos y desea apuntar a dispositivos antes de API 11, debe usarlos android.support.v4.app.Fragment. Sin embargo, si solo está apuntando a dispositivos que ejecutan API 11 o superior, puede usar android.app.Fragment.

Editar: el sistema operativo android.app.Fragment ahora está en desuso (a partir del nivel 28 de API), y todos deberían pasar a usar las implementaciones de la biblioteca de soporte.

Raghav Sood
fuente
44
Consulte también "Uso de FragmentStatePagerAdapter SIN biblioteca de soporte": stackoverflow.com/questions/18512294/…
CJBS
Si anula onAttach (), consulte este hilo para evitar que no se llame en algunas circunstancias con android.app.Fragment: stackoverflow.com/questions/32083053/…
Hong
3
usará Androidx: androidx.fragment.app.Fragment
Abhijit Kurane el
56

A partir de 2018:

De la android.app.Fragment documentación :

Esta clase quedó en desuso en el nivel 28 de API.
Use la Biblioteca de soporte Fragmentpara un comportamiento coherente en todos los dispositivos y acceso a Lifecycle.

Por lo tanto, los fragmentos de soporte ( android.support.v4.app.Fragment) deben usarse en todas partes en lugar de fragmentos nativos ( android.app.Fragment) ahora.

Artyom
fuente
@Artyom, como un novato para el desarrollo de Android, esperaba que cuando la android.app.Fragmentclase fuera obsoleta, el nivel 28 de la API tuviera un enfoque de reemplazo alternativo, posiblemente radical. ¿Existe un enfoque hacia adelante o es compatible con android.support.v4.app.Fragmentla versión anterior?
ergohack
1
@ergohack Véalo de esa manera: para el código java puede incluir el código de bytes dentro del tiempo de ejecución del dispositivo o dentro del archivo jar de la aplicación. El código de la biblioteca de soporte se colocará en su jar y proporcionará la misma función que el código proporcionado en tiempo de ejecución, por lo que no hay razón para no usar la biblioteca de soporte moderna y mantenida en lugar del código antiguo y sin mantenimiento de su teléfono objetivo.
Pierre
12

Yo uso android.support.v4.app.Fragmentexclusivamente.

Todas las aplicaciones que escribo deben ser compatibles con Android 2.3 y esta es la forma más fácil de hacerlo.

Si estás apoyando a 11+, entonces quédate android.app.Fragment.

alex
fuente
18
En ese caso, se está perdiendo muchas funciones que existen en la biblioteca de soporte, pero solo en la nativa después de un cierto nivel de API. getChildFragmentManager (), por ejemplo, no está disponible hasta el nivel 17. Mi consejo es usar solo los Fragmentos de soporte y fingir que el nativo no existe.
Johan
4

Si su aplicación está destinada a API 11 o superior, puede usarla android.app.Fragmenty su archivo APK será más pequeño.

De lo contrario, agregue la android.support.v4.app.Fragmentbiblioteca a su proyecto para admitir versiones anteriores de la API de Android (Android 3.x).

Ahmad Payan
fuente
2

android.support.v4.app.Fragment es una biblioteca que puede usar para obtener compatibilidad con versiones anteriores de la API.

Se agregaron fragmentos en el nivel de API 11 (junto con otras características). Debe incluir esa biblioteca para extender esas funciones a dispositivos anteriores a API 11. Esa es una biblioteca útil y sugiero echar un vistazo a ActionBarSherlock, que extiende la barra de acción a dispositivos pre-API v11.

MonoDroid
fuente
-2

Si su aplicación está destinada a API 11 o superior, puede usar android.app.Fragment y reducirá el tamaño del APK. De lo contrario, use android.support.v4.app.Fragment

vinod wickramasekara
fuente