Qual è la differenza tra Fragment e FragmentActivity?


Risposte:


280

A Fragmentè una sezione di an Activity, che ha:

  • il proprio ciclo di vita
  • riceve i propri eventi di input
  • può essere aggiunto o rimosso mentre Activityè in esecuzione.

A Fragmentdeve sempre essere incorporato in un Activity.

Fragmentsnon fanno parte dell'API precedente a HoneyComb (3.0). Se si desidera utilizzare Fragmentsun'app destinata a una versione della piattaforma precedente a HoneyComb, è necessario aggiungere il pacchetto di supporto al progetto e utilizzare il FragmentActivityper conservare il proprio Fragments. La FragmentActivityclasse ha un'API da gestire Fragments, mentre la Activityclasse, prima di HoneyComb, no.

Se il tuo progetto ha come target HoneyComb o solo versioni successive, dovresti utilizzare Activitye non FragmentActivitytenere il tuo Fragments.

Alcuni dettagli:

Utilizzare android.app.Fragmentcon Activity. Utilizzare android.support.v4.app.Fragmentcon FragmentActivity. Non aggiungere il pacchetto di supporto Fragmenta unActivity in quanto genererà un'eccezione.

Una cosa da fare attenzione: FragmentManagere LoaderManageravere versioni di supporto separate per FragmentActivity:

Se si utilizza a Fragmentin Activity(HoneyComb e versioni successive), chiamare

  • getFragmentManager() ottenere android.app.FragmentManager
  • getLoaderManager() ottenere android.app.LoaderManager

se stai usando a Fragmentin FragmentActivity(pre-HoneyComb), chiama:

  • getSupportFragmentManager()per ottenere android.support.v4.app.FragmentManager.
  • getSupportLoaderManager() ottenere android.support.v4.app.LoaderManager

quindi, non farlo

//don't do this
myFragmentActivity.getLoaderManager(); 
//instead do this:
myFragmentActivity.getSupportLoaderManager();

o

//don't do this:
android.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager();
//instead do this:
android.support.v4.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager()

È anche utile sapere che mentre un frammento deve essere incorporato in un frammento Activitynon deve far parte del Activitylayout. Può essere utilizzato come lavoratore invisibile per l'attività, senza un'interfaccia utente propria.


6
Tuttavia, non è necessario che un frammento faccia parte del layout dell'attività; è inoltre possibile utilizzare un frammento senza la propria interfaccia utente come lavoratore invisibile per l'attività.
uzay95,

1
@ uzay95 grazie per averlo segnalato. Ho aggiunto una sezione alla fine per menzionarla.
Gunnar Karlsson,

@GunnarKarlsson Aggiungiamo frammento a fragmentActivity?
Dhasneem,

2
@Dhasneem Aggiungi un frammento a FragmentActivity se vuoi che la tua app funzioni su versioni Android precedenti alla 3.0. Altrimenti aggiungi un frammento a un'attività.
Gunnar Karlsson,

2
Grazie! Questo risolve il mio problema! Ora so perché la mia app (scritta con Activity) si blocca sempre su onCreate dopo aver aggiunto il pulsante di accesso di Facebook (usano android.support.v4.app.Fragment nel loro esempio). Naturalmente ci sono anche altri motivi per l'incidente. Ma la tua risposta è l'ultimo pezzo per metterli insieme.
Chlind

14

FragmentActivity è la nostra classica attività con supporto dei frammenti, niente di più. Pertanto FragmentActivity è necessario, quando un frammento verrà associato all'attività.

Bene, il frammento è un buon componente che copia i comportamenti di base di Activity, non è ancora un componente di applicazione autonomo come Activity e deve essere collegato ad Activity per funzionare.

Guarda qui per maggiori dettagli


1
A proposito, risposta non aggiornata, che si applica solo alle app che desiderano lavorare su dispositivi più vecchi dell'API 11.
ToolmakerSteve

@ToolmakerSteve puoi fornire maggiori dettagli? Se possibile, puoi modificare la risposta con una versione aggiornata?
Gökhan Barış Aker,

8

Pensa a FragmentActivity come una normale classe Activity in grado di supportare Fragments. Prima del nido d'ape, una classe di attività non poteva sostituire direttamente i frammenti, quindi è necessario nelle attività che usano i frammenti.

Se la distribuzione target è Honeycomb e oltre, puoi invece estenderti dall'attività.

Anche un frammento deve essere considerato come una "subattività". Non può esistere senza un'attività. Pensa sempre a un frammento come un'attività secondaria e dovresti essere bravo. Quindi l'attività sarebbe il genitore e il frammento (s) il tipo di bambino di relazione simbolica.


1

a FragmentActivity è un'attività ad hoc che contiene Fragment. In queste poche parole ti ho spiegato uno dei principali cambiamenti importanti che, con Android 3.0 (HoneyComb), il team di Android ha inserito nel sdk di Android.

Con questo nuovo tipo di concetto i tuoi pezzi di codice e layout diventano più flessibili e mantenibili. Se cerchi su google ci sono molti esempi.

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.