android - manage - method fragment




Dilemma: quando usare Fragments vs Activities: (9)

So che le Activities sono progettate per rappresentare una singola schermata della mia applicazione, mentre i Fragments sono progettati per essere riutilizzabili nei layout dell'interfaccia utente con la logica incorporata al loro interno.

Fino a non molto tempo fa, ho sviluppato un'applicazione in quanto diceva che dovrebbero essere sviluppati. Ho creato un'attività per rappresentare uno schermo della mia applicazione e ho usato Frammenti per ViewPager o Google Maps . Raramente ho creato un ListFragment o un'altra interfaccia utente che può essere riutilizzata più volte.

Recentemente mi sono imbattuto in un progetto che contiene solo 2 Activities una delle quali è MainActivity e l'altra è la MainActivity . Il layout di MainActivity è popolato con molti frammenti dell'interfaccia utente nascosti a schermo intero e ne viene mostrato solo uno. Nella logica di Acitivty ci sono molte FragmentTransitions tra le diverse schermate dell'applicazione.

Quello che mi è piaciuto di questo approccio è che, poiché l'applicazione utilizza un ActionBar , rimane intatta e non si muove con l'animazione di commutazione dello schermo, che è ciò che accade con il cambio di Activity . Ciò conferisce una sensazione più fluida a quelle transizioni dello schermo.

Quindi immagino che quello che sto chiedendo sia di condividere le tue attuali modalità di sviluppo riguardo questo argomento, so che potrebbe sembrare una domanda basata sull'opinione al primo sguardo, ma la considero come una domanda di architettura e design Android ... Non proprio un basato sull'opinione pubblica.

AGGIORNAMENTO (01.05.2014): A seguito di questa presentazione di Eric Burke di Square , (che devo dire è un'ottima presentazione con molti strumenti utili per gli sviluppatori Android e non sono correlato in alcun modo a Square)

http://www.infoq.com/presentations/Android-Design/

Dalla mia esperienza personale negli ultimi mesi, ho trovato che il modo migliore per costruire le mie applicazioni è creare gruppi di frammenti che arrivano a rappresentare un flusso nell'applicazione e presentare tutti quei frammenti in un'unica Activity . Quindi in pratica avrai lo stesso numero di Activities nella tua applicazione come il numero di flussi. In questo modo la barra delle azioni rimane intatta su tutti gli schermi del flusso, ma viene ricreata modificando un flusso che ha molto senso. Come afferma Eric Burke e come sono arrivato a rendermi conto, la filosofia di usare il minor numero possibile di attività non è applicabile a tutte le situazioni perché crea confusione in quella che chiama l'attività "Dio".


Bene, secondo le lezioni di Google (forse here , non ricordo), dovresti considerare l'uso di Frammenti ogni volta che è possibile, in quanto rende il tuo codice più facile da mantenere e controllare.

Tuttavia, penso che in alcuni casi può diventare troppo complesso, poiché l'attività che ospita i frammenti deve navigare / comunicare tra loro.

Penso che dovresti decidere da solo cosa è meglio per te. Di solito non è così difficile convertire un'attività in un frammento e viceversa.

Ho creato un post su questo dillema here , se desideri leggere qualcosa in più.


C'è di più a questo che ti rendi conto, devi ricordare che un'attività che viene lanciata non distrugge implicitamente l'attività di chiamata. Certo, puoi configurarlo in modo tale che l'utente clicchi su un pulsante per andare a una pagina, inizi l'attività di quella pagina e distruggi quella corrente. Ciò causa un sacco di spese generali. La migliore guida che posso darti è:

** Avvia una nuova attività solo se ha senso avere l'attività principale e questa aperta contemporaneamente (pensa a più finestre).

Un ottimo esempio di quando è logico avere più attività è Google Drive. L'attività principale fornisce un esploratore di file. Quando un file viene aperto, viene lanciata una nuova attività per visualizzare quel file. Puoi premere il pulsante delle app recenti che ti consentirà di tornare al browser senza chiudere il documento aperto, quindi magari aprire un altro documento in parallelo al primo.


Dipende da cosa vuoi veramente costruire. Ad esempio il navigation drawer utilizza i frammenti. Le schede usano anche i fragments . Un'altra buona implementazione, è dove hai un listview . Quando si ruota il telefono e si fa clic su una riga, l'attività viene visualizzata nella metà restante dello schermo. Personalmente, utilizzo i fragment dialogs fragments e fragment dialogs , in quanto è più professionale. Inoltre sono gestiti più facilmente in rotazione.


Gli esperti ti diranno: "Quando vedo l'interfaccia utente, saprò se usare un'attività o un Fragment ". All'inizio questo non avrà alcun senso, ma col tempo, sarai in grado di dire se hai bisogno di Fragment o meno.

C'è una buona pratica che ho trovato molto utile per me. Mi è venuto in mente mentre stavo cercando di spiegare qualcosa a mia figlia.

Vale a dire, immagina una scatola che rappresenta uno schermo. Puoi caricare un altro schermo in questa scatola? Se usi una nuova scatola, dovrai copiare più oggetti dalla prima scatola? Se la risposta è Sì, allora dovresti usare Fragments , perché l' Activity della root può contenere tutti gli elementi duplicati per farti risparmiare tempo nel crearli, e puoi semplicemente sostituire parti della scatola.

Ma non dimenticare che hai sempre bisogno di un contenitore ( Activity ) o che le tue parti saranno disperse. Quindi una scatola con parti all'interno.

Fare attenzione a non utilizzare la scatola in modo improprio. Gli esperti di Android UX consigliano (puoi trovarli su YouTube) quando dovremmo caricare esplicitamente un'altra Activity , invece di usare un Fragment (come quando ci occupiamo del Navigatore che ha categorie). Una volta che ti senti a tuo agio con Fragments , puoi guardare tutti i loro video. Ancora più sono materiale obbligatorio.

Puoi ora guardare la tua interfaccia utente e capire se hai bisogno di un'attività o di un Fragment ? Hai avuto una nuova prospettiva? Penso che tu l'abbia fatto


La mia filosofia è questa:

Crea un'attività solo se è assolutamente necessaria. Con il backstack reso disponibile per il commit di una serie di transazioni frammentarie, cerco di creare il minimo di attività nella mia app il più possibile. Inoltre, comunicare tra vari frammenti è molto più semplice piuttosto che inviare dati avanti e indietro tra le attività.

Le transizioni di attività sono costose, giusto? Almeno io credo di sì - dal momento che la vecchia attività da distruggere / pausa / fermato, spinto in pila e poi la nuova attività deve essere creata / avviata / ripresa.

È solo la mia filosofia da quando sono stati introdotti i frammenti.


Non dimenticare che un'attività è il blocco / componente dell'applicazione che può essere condiviso e avviato tramite Intent! Quindi ogni attività nella tua applicazione dovrebbe risolvere solo un tipo di compito. Se hai un solo compito nella tua applicazione, penso che tu abbia bisogno di una sola attività e molti frammenti, se necessario. Naturalmente puoi riutilizzare i frammenti in attività future che risolvono altri compiti. Questo approccio sarà una separazione chiara e logica delle attività. E non è necessario mantenere un'attività con diversi parametri del filtro intent per diversi set di frammenti. Definite le attività in fase di progettazione del processo di sviluppo in base ai requisiti.


Secondo me non è molto pertinente. Il fattore chiave da considerare è

  1. con quale frequenza riutilizzerai parti dell'interfaccia utente (menu per esempio),
  2. è l'app anche per i tablet?

L'uso principale dei frammenti è la creazione di attività multiple, che lo rendono perfetto per le app reattive Tablet / Phone.


Sei libero di usare uno di questi.
Fondamentalmente, devi valutare qual è il migliore per la tua app. Pensa a come gestirai il flusso aziendale e come memorizzare / gestire le preferenze dei dati.

Pensa a come i frammenti memorizzano i dati inutili. Quando implementi il ​​frammento, hai una radice di attività da riempire con i frammenti. Quindi, se stai cercando di implementare molte attività con troppi frammenti, devi prendere in considerazione le prestazioni della tua app, perché stai manipolando (parla in modo grossolano) due cicli di vita del contesto, ricorda la complessità.

Ricorda: dovrei usare i frammenti? Perché non dovrei?

Saluti.


utilizzare una attività per applicazione per fornire una base per fragment utilizzare il fragment per lo schermo, i fragments sono di peso leggero rispetto ai frammenti di activites frammenti riutilizzabili sono più adatti per l'app che supporta sia il telefono che il tablet





architecture