2013-02-05 13 views
7

Sto imparando i frammenti ma non riesco a capire il significato dietro al perché i frammenti richiedono un contenitore.Scopo del contenitore in frammenti per Android

Il modo comprendo Frammenti lavoro è il seguente:

  1. FragmentActivity setContentView si riferisce ad un file XML che definisce dove sarebbe situato frammenti.

  2. FragmentActivity crea un'istanza dei frammenti

  3. Poi assegna frammento contenitore.

  4. FragmentManager quindi li visualizza.

  5. La classe Fragment effettiva gonfia quindi un layout ed è questo layout che contiene tutti i componenti dell'interfaccia utente dell'applicazione.

(correggimi se mi manca qualcosa qui perché sto imparando solo al momento).

Quindi, perché è lo scopo del contenitore perché ne abbiamo bisogno, poiché in tutti gli esempi che ho visto si tratta solo di un documento xml con layout relativo vuoto.

I diversi frammenti possono condividere lo stesso contenitore (dal momento che è un file xml RelativeLayout)?

Quindi, nell'esempio fornito da Google http://developer.android.com/training/basics/fragments/creating.html

Hanno un ListFragment e quando l'oggetto viene selezionato attraverso l'uso dell'interfaccia CallBack abbiamo finalmente tornare a questa riga di codice:

// Replace whatever is in the fragment_container view with this fragment, 
// and add the transaction to the back stack so the user can navigate back 
transaction.replace(R.id.fragment_container, newFragment); 

mio altra domanda è:

1) Perché questa riga di codice non sostituisce il ListFragment (Frammento lato sinistro) con il frammento dell'articolo. Da quando è stato inizializzato, vediamo:

getSupportFragmentManager().beginTransaction() 
        .add(R.id.fragment_container, firstFragment).commit(); 

Invece ... il ListFragment rimane a sinistra e il Frammento di destra viene aggiornato. Ma il contenitore fragment_container appartiene a firstFragment questo è il ListFragment. E questo non è quello che viene aggiornato.

Capisci perché ho una domanda? Questo non è spiegato nel tutorial.

risposta

3

Qui: http://marakana.com/s/post/1250/android_fragments_tutorial

E qui: http://developer.android.com/guide/components/fragments.html

leggere questo e tutto sarà chiaro :)

frammento è una porzione di attività e può esistere solo all'interno di un'attività. Quindi hai bisogno di un tipo speciale di attività in grado di gestire i frammenti: è FragmentActivity.

FragmentAttività senza frammenti è quasi come un'attività normale.Ma ha un FragmentManager per gestire (aggiungere, rimuovere, sostituire) i frammenti. Quando vuoi aggiungere un Fragment a un FragmetnActivity devi specificare dove deve essere posizionato (perché il frammento non ha bisogno di essere a schermo intero, proprio come GooglePlay: ci sono molti piccoli frammenti). Quindi questo è il motivo per cui hai bisogno di un contenitore.

Possono diversi frammenti condividere lo stesso contenitore (poiché è solo un file xml RelativeLayout)?

Sì, è possibile, è possibile sostituire un frammento con un altro all'interno dello stesso contenitore.

+3

L'affermazione "Quindi è necessario un tipo speciale di attività in grado di gestire il frammento: è FragmentActivity." è vero per le versioni precedenti di Android e quando si utilizzano le librerie di supporto. Nella versione corrente (ad esempio, l'API 19 di Android), l'attività predefinita ha già la funzionalità frammento. Per esempio. la funzione getFragmentManager(): http://developer.android.com/reference/android/app/Activity.html#getFragmentManager() – treesAreEverywhere

+0

Come sostituire un particolare frammento in un contenitore che contiene più frammenti con un nuovo frammento? –

+0

La sostituzione dei frammenti non è la stessa di frammenti diversi che condividono lo stesso contenitore. Due frammenti non possono condividere un contenitore se uno è stato sostituito dall'altro. – craned

Problemi correlati