Differenza tra android.app.Fragment e android.support.v4.app.Fragment


175

Qual è la differenza tra android.app.Fragmente android.support.v4.app.Fragmente quali sono le circostanze in cui ciascuna dovrebbe essere usata?

Risposte:


288

android.support.v4.app.Fragmentè la classe Fragment nella libreria di supporto Android, che è un pacchetto di compatibilità che ti consente di utilizzare alcune delle nuove funzionalità di Android su versioni precedenti di Android.

android.app.Fragmentè la classe Fragment nella versione nativa di Android SDK. È stato introdotto in Android 3 (API 11).

Se desideri che la tua app utilizzi frammenti e desideri indirizzare i dispositivi prima dell'API 11, devi utilizzare android.support.v4.app.Fragment. Tuttavia, se scegli come target solo dispositivi con API 11 o successiva, puoi utilizzare android.app.Fragment.

Modifica: il contenuto del sistema operativo android.app.Fragment ora è obsoleto (a partire dal livello API 28) e tutti dovrebbero spostarsi utilizzando le implementazioni della libreria di supporto.


4
Inoltre vedere "Uso FragmentStatePagerAdapter SENZA libreria di supporto": stackoverflow.com/questions/18512294/...
CJBS

Se si esegue l'override di Attach (), vedere questo thread per evitare che non venga chiamato in alcune circostanze con android.app.Fragment: stackoverflow.com/questions/32083053/…
Hong

3
utilizzerà Androidx: androidx.fragment.app.Fragment
Abhijit Kurane

56

A partire dal 2018:

Dalla android.app.Fragment documentazione :

Questa classe è stata deprecata a livello di API 28.
Utilizzare la libreria di supporto Fragmentper un comportamento coerente su tutti i dispositivi e l'accesso al ciclo di vita.

Quindi adesso i frammenti di supporto ( android.support.v4.app.Fragment) dovrebbero essere usati ovunque invece dei frammenti nativi ( android.app.Fragment).


@Artyom, come noob per lo sviluppo Android, mi aspettavo che quando la android.app.Fragmentclasse fosse stata deprecata, quel livello API 28 avrebbe avuto un approccio sostitutivo alternativo, forse radicale. Esiste un approccio in avanti o è compatibile con android.support.v4.app.Fragmentle precedenti?
ergohack,

1
@ergohack Vedilo in questo modo: per il codice java puoi includere il bytecode all'interno del runtime del dispositivo o all'interno del file jar dell'applicazione. Il codice della libreria di supporto verrà inserito nel tuo jar e fornirà la stessa funzionalità del codice fornito dal runtime, quindi non c'è motivo di non utilizzare la libreria di supporto moderna e mantenuta invece del codice obsoleto e non mantenuto del telefono di destinazione.
Pierre,

12

Io uso android.support.v4.app.Fragmentesclusivamente.

Tutte le app che scrivo devono supportare subito Android 2.3 e questo è il modo più semplice per farlo.

Se stai supportando 11+, segui android.app.Fragment.


18
In tal caso, ti perdi molte funzionalità esistenti nella libreria di supporto, ma solo in quella nativa dopo un certo livello API. getChildFragmentManager () per esempio non è disponibile fino al livello 17. Il mio consiglio è di usare solo i frammenti di supporto e far finta che quello nativo non esista.
Johan

4

Se l'applicazione è destinata all'API 11 o successiva, è possibile utilizzare android.app.Fragmente il file APK sarà più piccolo.

Altrimenti, aggiungi la android.support.v4.app.Fragmentlibreria al tuo progetto per supportare le vecchie versioni dell'API Android (Android 3.x).


2

android.support.v4.app.Fragment è una libreria che è possibile utilizzare per ottenere la compatibilità con le versioni precedenti dell'API precedente.

Frammenti sono stati aggiunti a livello di API 11 (insieme ad altre funzionalità). Dovresti includere quella libreria per estendere tale funzione ai dispositivi pre-API 11. Questa è una libreria utile e suggerisco di dare un'occhiata ad ActionBarSherlock, che estende la barra delle azioni ai dispositivi pre-API v11.


-2

Se la tua applicazione è destinata all'API 11 o superiore, puoi usare android.app.Fragment e ridurrà le dimensioni dell'APK. Altrimenti usa android.support.v4.app.Fragment

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.