Perché usare i frammenti di Android?


15

Ho letto la documentazione e alcuni thread di altre domande su questo argomento e non mi sento davvero convinto; Non vedo chiaramente i limiti di utilizzo di questa tecnica.

I frammenti sono ora visti come una migliore pratica ; ogni attività dovrebbe essere sostanzialmente un supporto per uno o più frammenti e non chiamare direttamente un layout.

I frammenti vengono creati per:

  1. consentire l' Activityutilizzo di molti frammenti, il cambiamento tra di essi, il riutilizzo di queste unità ... ==> Fragmentè totalmente dipendente dalla Contextdi un'attività, quindi se ho bisogno di qualcosa di generico che posso riutilizzare e gestire in molte attività, posso crea i miei layout o viste personalizzati ... Non mi preoccuperò di questo livello di sviluppo di complessità aggiuntivo che i frammenti aggiungerebbero.

  2. una migliore gestione a diversa risoluzione ==> OK per tablet / telefoni in caso di processo lungo che possiamo mostrare due (o più) frammenti nella stessa attività in tablet e uno per uno nei telefoni. Ma perché dovrei usare sempre i frammenti ?

  3. gestire i callback per navigare tra i frammenti (es .: se l'utente è loggato mostro un frammento altrimenti mostro un altro frammento). ===> Prova a vedere quanti bug Facebook SDK ha accesso a causa di ciò, per capire che è davvero (?) ...

  4. considerando che un'applicazione Android si basa sulle attività ... Aggiungere un altro ciclo di vita nell'attività sarebbe meglio progettare un'applicazione ... Intendo dire che i moduli, gli scenari, la gestione dei dati e la connettività sarebbero meglio progettati, in quanto modo. ===> Questa è una risposta di chi è abituato a vedere Android SDK e Android Framework con una visione di Frammenti. Non penso sia sbagliato, ma non sono sicuro che darà buoni risultati ... Ed è davvero astratto ...

====> Perché dovrei complicare la mia vita, programmare di più, usandoli sempre? altrimenti, perché è una buona pratica se in alcuni casi è solo uno strumento? quali sono questi casi?


1
Non è chiaro cosa stai chiedendo, potresti riassumere la domanda, magari sotto l'enumerazione dei presunti vantaggi e le tue critiche a ciascuno?
logc,

Ho aggiunto una domanda dettagliata.
ahmed_khan_89,

Mi sono perso come @logc. Come gestiresti questi casi senza frammenti?
Neontapir,

Ho dato quello che avrei fatto senza Frammenti: (1) creando controlli generici personalizzati e riutilizzandoli dove voglio (2) usando 2 Attività e navigando con startActivityForResult, o semplicemente cambiando visualizzazione (mostrando / nascondendo, gonfiando / rimuovendo ...) senza codificare così tanto ... (3) puoi usare un callback anche in Attività con vista (4) È una risposta astratta che ottengo sempre quando discuto questo argomento ... che ha bisogno di più spiegazioni ...
ahmed_khan_89

1
Hmm. Queste domande e risposte mostrano i limiti del design di stackexchange in cui il poster originale sceglie la risposta "migliore". (A differenza di slant.co, dove tutti votano.) Non ideale per una domanda ampia come questa. Qui, una vaga domanda ottiene una risposta accettata che ovviamente concorda con ciò che l'interlocutore voleva sentire. Se non vedi alcun motivo per usare il frammento nella tua situazione, allora non farlo. Una domanda migliore sarebbe quella di chiedere vantaggi / svantaggi del frammento rispetto all'attività . E ci sono molti thread su quell'argomento esatto.
ToolmakerSteve

Risposte:


5

Il frammento è una sezione modulare di un'attività che ha il proprio ciclo di vita, riceve i propri eventi di input, che è possibile aggiungere o rimuovere mentre l'attività è in esecuzione (una specie di "attività secondaria" che è possibile riutilizzare in diverse attività)

Oltre all'ovvio vantaggio dell'utilizzo di frammenti, l'ottimizzazione dell'interfaccia utente su schermate diverse, consente di gestire l'elaborazione in background dell'attività senza un componente visibile dell'interfaccia utente.

Adesso...

====> Perché dovrei complicare la mia vita, scrivere di più ... ??

Anche se raccomandato, non è necessario a meno che non si preveda di controllare il ciclo di vita dei singoli elementi e / o riutilizzare lo stato dello stack o la cronologia delle viste precedenti.


5

Se esiste un caso d'uso "gateway" per gli scettici sui frammenti, probabilmente sono dialoghi. I metodi deprecati a lungo showDialog(...), onCreateDialog(...)e così via, erano belle a che il quadro avrebbe chiamato loro di distruggere e ricreare le finestre di dialogo quando l'attività di hosting è stato distrutto e ricreato automaticamente. Se crei direttamente le tue finestre di dialogo, devi gestire tu stesso tutto ciò. Ma se usi a DialogFragment, puoi ancora una volta lasciare che il framework li gestisca per te. In questo caso, i frammenti possono semplificare notevolmente la codifica.


1

Ho fatto questa domanda più di un anno fa.

Sto usando i frammenti ogni giorno e lo consiglierei.

Prima di tutto, voglio dire che l'uso dei frammenti è solo un'opzione e sarà un riflesso da considerare una volta che inizi a usarli.

vantaggi:

1 / aiuta a modulare il codice in cui è possibile avere un flusso completo in un'attività, in frammenti separati. Esempio: + elenco / griglia e dettagli, + login e registrazione e dimentica password, + ecc. Questo è fantastico per ottenere un codice riutilizzabile, che puoi sempre copiare e incollare in diversi progetti.

2 / hai un nuovo ciclo di vita, pieno di fastidi che è vero, ma anche con vantaggi. Esempio: il frammento di istanza conservato è fantastico perché risolve il problema dell'orientamento.

3 / puoi gestire il flusso dei tuoi frammenti per eventi e ascoltatori dall'attività.

4 / una pila di frammenti nella tua attività.

5 / usa la stessa barra delle azioni in molte schermate.

E molti altri...

A volte uso ancora l'attività come unico contenitore, in particolare per la custodia della fotocamera. Alcune API Android e alcune librerie di terze parti non sono facili da implementare in frammenti.

Bene, è come qualsiasi strumento, devi considerarlo e giudicare da solo se è meglio usarlo in un caso o in un altro.

Spero che questo possa aiutare !!!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.