2011-12-21 13 views
94

So perché usare i frammenti e il sito per sviluppatori Android spiega questo. Ma nella maggior parte dei casi voglio sui tablet le diverse parti per avere il loro comportamento speciale e l'interfaccia utente e non so come i frammenti possano aiutare. Nella maggior parte dei casi, penso che sia più veloce creare 2 attività diverse (1 per tablet e 1 per portatili) e condividere i comportamenti e gli eventi comuni in una terza classe. Quindi, tenendo presente questo, perché dovrei usare i frammenti?Quando devo usare i frammenti nelle applicazioni Android? Perché usare i frammenti?

risposta

69

frammenti sono più di un beneficio UI a mio parere. È comodo che l'utente a volte veda due diverse visualizzazioni di due classi diverse sullo stesso schermo. Se, nel momento della tua creatività, decidi che sarebbe bello visualizzare la tua applicazione con, ad esempio, un listView che occupa metà dello schermo e una webView che occupa l'altra metà, in modo che quando fai clic su un elemento dell'elenco in frammento A passa un intento alla webView nel frammento B, e improvvisamente vedi ciò che hai appena fatto senza le attività di commutazione dell'app - quindi potresti usare un frammento. Questo è solo un esempio che mi è venuto in mente.

Riga inferiore: i frammenti sono due o più attività sullo schermo allo stesso tempo.

+61

Perché utilizzare i frammenti quando è possibile fare esattamente la stessa cosa con diversi layout principali e classi diverse? Più facile avere due layout principali, uno per la lista e l'altro per la webview. Personalmente ritengo che la tua risposta sia errata, come hai affermato solo per quali frammenti sono usati, non perché dovresti usarlo al posto di un'attivazione che ospita due classi.Infatti, avere un'attività e ospitare due classi è più facile in quanto non è necessario gestire intenti e un'interfaccia parcellizzabile per serializzare gli oggetti che si desidera passare. ottieni l'accesso diretto alla classe – jonney

+0

Quindi, è consigliabile utilizzare i frammenti per un modulo di ricerca che è visibile in più di una attività? – Muatik

+0

OMG Quindi QUESTO è il modo in cui alcune app ora fanno scorrere nuove "viste" quando tocco qualcosa? Quindi per usare un frammento, abbiamo solo (per esempio) un file di layout principale e poi usiamo '' all'interno di quel file dove vogliamo includere un frammento? E forse se non vogliamo che un frammento sia sempre lì o lo nascondi e lo mostri quando è necessario o lo inietti quando è necessario? – username

14

Google ti consiglia di utilizzare SEMPRE i frammenti.

Perché? È semplice:

Nel caso più semplice, i frammenti vengono utilizzati come contenitori di attività.

Perché ne hai bisogno? Di nuovo, è semplice.

Android 4 (ICS) supporta smartphone e tablet. Ciò significa che l'applicazione SAME verrà eseguita su uno smartphone e un tablet e sono probabilmente molto diversi.

I tablet hanno schermi grandi che saranno vuoti o inutilizzati, a meno che non vengano assegnati correttamente.

Ciò significa: inserire due frammenti su un'attività come Elenco contatti e Informazioni contatto.

Lo smatphone visualizzerà Elenco contatti e su un display tattile le informazioni del contatto.

Su un tablet, l'utente vedrà comunque l'elenco e le informazioni saranno ad esso adiacenti.

2 fragments- su uno schermo ....

intelligente? sì ... dovrebbe essere di nuovo compatibili verso il basso per Android 1.6 ......


######################## ######################

OK, lo sapevi già? quindi prova a capire il caso risolto:

Un sacco di cose funzionano in questo modo- elenca i dettagli &, Menu e sottomenu, Info, Informazioni dettagliate e alcune informazioni più dettagliate. Vuoi un modo per mantenerlo naturale e scorrevole per un tablet che prevedi di preformare in questo modo, ma non puoi aspettarti che lo smartphone visualizzi tutto come il tablet ...

Acquistalo?

per più informazioni, visitate this. Credo davvero che basta per catturare il concetto ....

+0

Sì, il concetto è clear..But nelle interfacce semplici in cui le diverse attività non ha rapporto diretto e ogni attività è semplice un contenitore di dati .. sono veramente necessari i frammenti? Posso evitarlo? E da un altro punto di vista, in ogni caso, il programma dovrebbe essere adattato per funzionare su diversi schermi, indipendentemente dal fatto che tu userai i frammenti o meno. –

+1

Sei corretto, non hai bisogno di Frammenti per supportare più dimensioni dello schermo. Ma dovrebbero renderlo più facile. Dovresti essere in grado di istanziare lo stesso identico frammento come un'attività a schermo intero su un telefono o come schermo parziale su un tablet con solo poche righe di codice per distinguere. Inoltre, poiché i frammenti gestiscono parte del proprio ciclo di vita, è necessario preoccuparsi di meno. – Sparky

+1

"Google ti consiglia di utilizzare SEMPRE frammenti."? Non sono d'accordo con questo. Personalmente penso che sia utile solo quando il dispositivo è designato e presenta una vista a riquadri o riquadri, a seconda delle dimensioni. – user1914692

55

I benefici ho verificare utilizzando frammenti sono:

  • incapsulamento della logica.
  • Migliore gestione del ciclo di vita del frammento.
  • Riutilizzabile in altre attività.

I inconvenienti I vedere sono:

  • Ulteriori codice (ad esempio, un'istanza di un gestore frammento, aggiungendo la transazione frammento, scrivendo i callback del frammento)
  • comunicazione tra frammenti e le attività sono più difficili Come diceva lo @jonney, avresti bisogno di gestire un'interfaccia parcellizzabile per serializzare i tuoi oggetti che desideri passare.

Così, quando si decide di utilizzare un frammento, mi chiedevo le seguenti domande:

  • è il ciclo di vita del frammento diverso dal ciclo di vita della propria attività?

Se il ciclo di vita è diverso, si ottiene una migliore gestione del ciclo di vita utilizzando un frammento. Ad esempio, se si desidera distruggere il frammento, ma non l'attività. Questo è il caso, quando hai un pager adapter.

  • Il frammento verrà utilizzato in diverse attività?

Gli eventi di input dell'utente saranno riutilizzabili se si utilizza un frammento.

  • La quantità di comunicazione tra il frammento e l'attività è ridotta?

Se è necessario passare oggetti grandi al frammento, sarà necessario gestire il codice che li serializza. Inoltre, se è necessario comunicare tra frammento e attività, è probabilmente necessario implementare interfacce. Questo, nella maggior parte dei casi, aggiunge complessità alla base di codice. Non è un produttore di differenza, ma un criterio da prendere in considerazione.

+0

Non è solo una questione di programmazione. Penso semplicemente che fare un'app non sia solo scrivere il codice sorgente, ma anche affrontare alcuni problemi di interfaccia utente per tablet che sono diversi dai problemi dei telefoni, e sinceramente non mi piace molto il modo in cui i frammenti dovrebbero risolvere il divario tra le dimensioni dello schermo. Facendo un'app non si tratta davvero di riempire gli spazi vuoti con alcuni pezzi ridondanti. Anche da un punto di vista di programmazione, se le mie parti hanno problemi a comunicare l'uno con l'altro, preferisco creare una classe gateway con elementi comuni invece di lottare con tubi deboli. –

+0

su questa frase "Il ciclo di vita del frammento è diverso dal ciclo di vita dell'attività?". Ho avuto molti casi in cui il punto di vista che è soggetto a un gruppo di vista separato ha lo stesso ciclo di vita. ma ho usato il frammento perché volevo usarlo in più punti e allo stesso tempo avevo bisogno di essere consapevole del ciclo di vita e fare un po 'di logica dipende da questo. mentre se ho usato il viewgroup avevo bisogno di informare il gruppo di vista sul ciclo di vita dell'attività chiamando manualmente un metodo personalizzato su Risorsa. –

8

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

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, immaginare una casella 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 Frammenti, perché la radice Activity può contenere tutti gli elementi duplicati per farti risparmiare tempo nel crearli, e puoi semplicemente sostituire parti della scatola.

Ma non dimenticate che avete sempre bisogno di un contenitore scatola (Activity) o le vostre parti sarà dispersa. Quindi una scatola con parti all'interno.

Fare attenzione a non utilizzare impropriamente la scatola. Gli esperti di Android UX consigliano (puoi trovarli su YouTube) quando dovremmo caricare esplicitamente un altro Activity, invece di usare un frammento (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.

Può ora guardare l'interfaccia utente e capire se è necessario un Activity o un Fragment? Hai avuto una nuova prospettiva? Penso che tu l'abbia fatto :)

+1

È un duplicato di [questo] (http://stackoverflow.com/a/25993052/2057291) argomento. Lo stesso autore, lo stesso giorno, solo pochi minuti di differenza. – tommus

4

Storicamente ogni schermata di un'app per Android è stata implementata come 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 esempio un oggetto) direttamente tra le attività. Invece l'oggetto deve essere serializzato o un riferimento accessibile globalmente reso disponibile.

Facendo di ogni schermata 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 di ciascuna schermata può semplicemente accedere al riferimento dell'oggetto tramite l'attività.

https://softwareengineering.stackexchange.com/questions/244771/why-use-android-fragments

0

di supporto Frammento più dinamico & Large Screen UI come schermo Tablet.Because Tablet è molto più grande di microtelefono normale. C'è più spazio per combinare il componente dell'interfaccia utente di scambio &.

Il frammento consente tale progettazione senza la necessità di modifiche così complesse nella gerarchia View.

da Divide layout di attività nel frammento, diventiamo in grado di modificare l'aspetto di attività in fase di esecuzione

Problemi correlati