2012-05-15 26 views

risposta

255

Un Fragment è una sezione di un Activity, che ha:

  • suo ciclo di vita
  • riceve suoi eventi di input
  • possono essere aggiunti o rimossi mentre il Activity è in esecuzione.

A Fragment deve essere sempre incorporato in un Activity.

Fragments non fanno parte dell'API prima di HoneyComb (3.0). Se si desidera utilizzare Fragments in un'app con targeting per una versione di piattaforma precedente a HoneyComb, è necessario aggiungere il Support Package al progetto e utilizzare lo FragmentActivity per contenere il numero Fragments. La classe FragmentActivity ha un'API per trattare con Fragments, mentre la classe Activity, precedente a HoneyComb, non lo fa.

Se il progetto ha come target solo HoneyComb o più recente, è necessario utilizzare Activity e non FragmentActivity per contenere il numero 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 Activity poiché causerà il lancio di un'eccezione.

Una cosa da stare attenti con: FragmentManager e LoaderManager hanno versioni di supporto separate per FragmentActivity:

Se si utilizza un Fragment in un Activity (HoneyComb e su), chiamano

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

se si utilizza un Fragment in un FragmentActivity (pre-nido d'ape), chiamare:

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

così, non facciamo

//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 Activity non deve essere parte del layout Activity. Può essere usato come un lavoratore invisibile per l'attività, senza alcuna interfaccia utente propria.

+5

Tuttavia, non è necessario che un frammento faccia parte del layout dell'attività; puoi anche usare un frammento senza la sua interfaccia utente come lavoratore invisibile per l'attività. – uzay95

+1

@ uzay95 grazie per averlo indicato. Ho aggiunto una sezione alla fine per parlarne. –

+0

@GunnarKarlsson Aggiungiamo il frammento a fragmentActivity? – Dhasneem

14

FragmentActivity è la nostra attività classica con supporto di frammenti, niente di più. Quindi FragmentActivity è necessario, quando un Frammento sarà collegato all'attività.

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

Cercare here per maggiori dettagli

+1

BTW, risposta non aggiornata, che si applica solo alle app che desiderano lavorare su dispositivi precedenti all'API 11. – ToolmakerSteve

+0

@ToolmakerSteve è possibile fornire ulteriori dettagli? Se possibile, puoi modificare la risposta con la versione aggiornata? –

1

un 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 Android ha inserito nel sdk di Android.

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

8

Pensate a FragmentAttività come una normale classe di attività che può supportare Frammenti. Prima di un nido d'ape, una classe di attività non poteva sopprimere direttamente i frammenti, quindi è necessaria nelle attività che utilizzano Frammenti.

Se la distribuzione di destinazione è Honeycomb e oltre, è possibile estendere l'attività invece.

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