Android: ho bisogno di alcuni chiarimenti sui frammenti rispetto alle attività e alle visualizzazioni


Nell'API Android 11+, Google ha rilasciato una nuova classe chiamata Fragment .

Nei video, Google suggerisce che, laddove possibile ( link1 , link2 ), dovremmo utilizzare i frammenti anziché le attività, ma non hanno spiegato esattamente perché.

Qual è lo scopo dei frammenti e alcuni possibili usi di essi (diversi da alcuni esempi di interfaccia utente che possono essere facilmente ottenuti con viste / layout semplici)?

La mia domanda riguarda i frammenti:

  1. Quali sono gli scopi dell'utilizzo di un frammento?
  2. Quali sono i vantaggi e gli svantaggi dell'utilizzo dei frammenti rispetto all'utilizzo di attività / viste / layout?

Domande bonus:

  1. Puoi dare alcuni usi davvero interessanti per i frammenti? Cose che Google non ha menzionato nei loro video?
  2. Qual è il modo migliore per comunicare tra i frammenti e le attività che li contengono?
  3. Quali sono le cose più importanti da ricordare quando usi i frammenti? Eventuali suggerimenti e avvertenze sulla tua esperienza?



Answers


# 1 e # 2 quali sono gli scopi dell'utilizzo di un frammento e quali sono i vantaggi e gli svantaggi dell'utilizzo di frammenti rispetto all'utilizzo di attività / viste / layout?

I frammenti sono la soluzione di Android per la creazione di interfacce utente riutilizzabili. È possibile ottenere alcune delle stesse cose utilizzando le attività e i layout (ad esempio utilizzando include). Però; i frammenti sono collegati all'API di Android, da HoneyComb e successivi. Lasciami elaborare;

  • ActionBar . Se desideri schede per ActionBar.TabListener nella tua app, vedi rapidamente che ActionBar.TabListener interfaccia ActionBar.TabListener ti offre un FragmentTransaction come argomento di input per il metodo onTabSelected . Probabilmente potresti ignorarlo e fare qualcosa di diverso e intelligente, ma lavoreresti contro l'API, non con esso.

  • FragmentManager gestisce «indietro» per te in modo molto intelligente. Indietro non significa tornare all'ultima attività, come per le attività regolari. Significa tornare allo stato del frammento precedente.

  • Puoi utilizzare il fantastico ViewPager con FragmentPagerAdapter per creare interfacce di scorrimento. Il codice FragmentPagerAdapter è molto più pulito di un normale adattatore e controlla le istanze dei singoli frammenti.

  • La tua vita sarà molto più facile se usi Fragments quando provi a creare applicazioni per telefoni e tablet. Dato che i frammenti sono così legati alle API Honeycomb +, ti consigliamo di usarli anche sui telefoni per riutilizzare il codice. È qui che la libreria di compatibilità è utile.

  • Potresti anche e dovresti usare i frammenti per le app pensate solo per i telefoni. Se hai in mente la portabilità. Uso ActionBarSherlock e le librerie di compatibilità per creare app "ICS in cerca", che sembrano identiche fino alla versione 1.6. Ottieni le ultime funzionalità come ActionBar , con schede, overflow, barra delle azioni divise, viewpager ecc.

Bonus 2

Il modo migliore per comunicare tra i frammenti è intento. Quando si preme qualcosa in un frammento, in genere si chiama StartActivity() con i dati su di esso. L'intento viene trasmesso a tutti i frammenti dell'attività avviata.




  1. Il frammento fa parte di un'attività, che contribuisce alla sua interfaccia utente a quell'attività. Il frammento può essere pensato come una subattività. Dove come lo schermo completo con cui l'utente interagisce è chiamato come attività. Un'attività può contenere più frammenti. Gli oggetti sono principalmente una parte secondaria di un'attività.

  2. Un'attività può contenere 0 o più numero di frammenti in base alle dimensioni dello schermo. Un frammento può essere riutilizzato in più attività, quindi si comporta come un componente riutilizzabile nelle attività.

  3. Un frammento non può esistere indipendentemente. Dovrebbe essere sempre parte di un'attività. Dove come attività può esistere senza alcun frammento in esso.




Non sono sicuro di quale video si stia riferendo, ma dubito che stiano dicendo che dovresti usare i frammenti invece delle attività, perché non sono direttamente intercambiabili. C'è in realtà una voce abbastanza dettagliata nella Guida Dev, prendere in considerazione la lettura per i dettagli.

In breve, i frammenti vivono all'interno delle attività e ogni attività può ospitare molti frammenti. Come le attività, hanno uno specifico ciclo di vita, a differenza delle attività, non sono componenti applicativi di primo livello. I vantaggi dei frammenti includono il riutilizzo del codice e la modularità (ad esempio, utilizzando la stessa visualizzazione elenco in molte attività), inclusa la possibilità di creare interfacce multi-riquadro (utili soprattutto sui tablet). Lo svantaggio principale è (alcuni) una maggiore complessità. Generalmente puoi ottenere la stessa cosa con viste (personalizzate) in un modo non standard e meno affidabile.




Un frammento è una parte dell'interfaccia utente o del comportamento di un'applicazione che può essere inserita in un'attività che consente una progettazione di attività più modulare. Non sarà sbagliato se diciamo che un frammento è una specie di subattività.

Di seguito sono riportati i punti importanti su un frammento:

  1. Un frammento ha il proprio layout e il proprio comportamento con i propri callback del ciclo di vita.

  2. È possibile aggiungere o rimuovere frammenti in un'attività mentre l'attività è in esecuzione.

  3. È possibile combinare più frammenti in un'unica attività per creare un'interfaccia utente a più riquadri.

  4. Un frammento può essere utilizzato in più attività.

  5. Il ciclo di vita del frammento è strettamente correlato al ciclo di vita della sua attività ospite.

  6. Quando l'attività viene messa in pausa, anche tutti i frammenti disponibili nell'account verranno fermati.

  7. Un frammento può implementare un comportamento senza componente dell'interfaccia utente.

  8. I frammenti sono stati aggiunti all'API Android in Android 3 (Honeycomb) con l'API versione 11.

Per maggiori dettagli, visita il sito ufficiale, Fragments .




Questa è un'informazione importante che ho trovato sui frammenti:

Storicamente ogni schermata in un'app per Android è stata implementata come un'attività separata. Ciò crea una sfida nel passare le informazioni tra le schermate perché il meccanismo Android Intent non consente il passaggio di un tipo di riferimento (ad es. Oggetto) direttamente tra le attività. Invece l'oggetto deve essere serializzato o un riferimento accessibile globalmente reso disponibile.

Rendendo ogni schermo un frammento separato, questo mal di testa che passa i dati è completamente evitato. I frammenti esistono sempre nel contesto di una determinata attività e possono sempre accedere a tale attività. Memorizzando le informazioni di interesse all'interno dell'Attività, il Frammento per ogni schermata può semplicemente accedere al riferimento dell'oggetto tramite l'Attività.




I frammenti sono particolarmente utili in alcuni casi, ad esempio dove vogliamo conservare un cassetto di navigazione in tutte le nostre pagine. È possibile gonfiare il layout di una cornice con qualsiasi frammento desiderato e continuare ad accedere al cassetto di navigazione.

Se avessi usato un'attività, avresti dovuto tenere il cassetto in tutte le attività che rendono il codice ridondante. Questo è un uso interessante di un frammento.

Sono nuovo di Android e continuo a pensare che un frammento sia utile in questo modo.




So che questo è già stato discusso a morte, ma vorrei aggiungere qualche altro punto:

  • I frags possono essere utilizzati per popolare Menu s e possono gestire i clic MenuItem da soli. Dando così ulteriori opzioni di modulazione per le tue attività. Puoi fare cose di ContextualActionBar e così via senza che la tua attività ne sia a conoscenza e in pratica può disaccoppiarla dalle cose di base che la tua attività gestisce (Navigazione / Impostazioni / Informazioni).

  • Un genitore Frag con bambino Frags può darti ulteriori opzioni per modulare i tuoi componenti. Ad esempio puoi facilmente scambiare i Frags, inserire nuovi Frags all'interno di un Pager o rimuoverli, riordinandoli. Tutto senza che la tua attività ne sappia nulla, concentrandosi solo sulle cose di livello superiore.




Un frammento vive all'interno di un'attività.

Mentre un'attività vive su se stessa.




Frammenti vive all'interno dell'Attività e ha:

  • il suo ciclo di vita
  • il proprio layout
  • i suoi frammenti figlio e così via

Pensa ai Frammenti come a un'attività secondaria dell'attività principale a cui appartiene, non può esistere e può essere chiamato / riutilizzato ancora e ancora. Spero che questo ti aiuti :)




1. Quali sono gli scopi dell'utilizzo di un frammento?

  • Ans:
    1. Affrontare le differenze di fattore di forma del dispositivo.
    2. Trasmissione delle informazioni tra le schermate dell'app.
    3. Organizzazione dell'interfaccia utente.
    4. Metafore avanzate dell'interfaccia utente.