La mia domanda è a parte le evidenti differenze ereditarie, quali sono le principali differenze tra Fragment
e FragmentActivity
? A quali scenari si adatta meglio ogni classe? Sto cercando di capire perché entrambe queste classi esistono ...
La mia domanda è a parte le evidenti differenze ereditarie, quali sono le principali differenze tra Fragment
e FragmentActivity
? A quali scenari si adatta meglio ogni classe? Sto cercando di capire perché entrambe queste classi esistono ...
Risposte:
A Fragment
è una sezione di an Activity
, che ha:
Activity
è in esecuzione.A Fragment
deve sempre essere incorporato in un Activity
.
Fragments
non fanno parte dell'API precedente a HoneyComb (3.0). Se si desidera utilizzare Fragments
un'app destinata a una versione della piattaforma precedente a HoneyComb, è necessario aggiungere il pacchetto di supporto al progetto e utilizzare il FragmentActivity
per conservare il proprio Fragments
. La FragmentActivity
classe ha un'API da gestire Fragments
, mentre la Activity
classe, prima di HoneyComb, no.
Se il tuo progetto ha come target HoneyComb o solo versioni successive, dovresti utilizzare Activity
e non FragmentActivity
tenere il tuo Fragments
.
Alcuni dettagli:
Utilizzare android.app.Fragment
con Activity
. Utilizzare android.support.v4.app.Fragment
con FragmentActivity
. Non aggiungere il pacchetto di supporto Fragment
a unActivity
in quanto genererà un'eccezione.
Una cosa da fare attenzione: FragmentManager
e LoaderManager
avere versioni di supporto separate per FragmentActivity:
Se si utilizza a Fragment
in Activity
(HoneyComb e versioni successive), chiamare
getFragmentManager()
ottenere android.app.FragmentManager
getLoaderManager()
ottenere android.app.LoaderManager
se stai usando a Fragment
in 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 Activity
non deve far parte del Activity
layout. Può essere utilizzato come lavoratore invisibile per l'attività, senza un'interfaccia utente propria.
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
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.
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.