2014-09-12 12 views
6

Sono nuovo su Android Fragment e sto provando a imparare le comunicazioni di Fragment to Activity. Qual è l'approccio migliore (best practice) in Android per la comunicazione Fragment to Activity?Migliori pratiche Android per le comunicazioni da frammento a attività

Diciamo che ho FragmentA e ActivityA. Dopo il mio schermo popups Fragmenta, vorrei svolgere someMethod (probabilmente Ui correlato) in ActivityA

Qui ci sono due (modello) possibile Solutions:

  1. In fragmenta getActivity e gettato l'attività da ActivityA e quindi chiamare somemethod.
  2. In FragmentA creare un callback dell'interfaccia e quindi implementare la richiamata in ActivityA. Quindi sul callback, chiama il somemethod.

Quale modello è più comune/utile nello sviluppo Android e perché. O hai ancora un modo migliore per comunicare dal frammento all'attività in Android da condividere con me?

Qualsiasi commento, opinione e suggerimento è molto apprezzato e benvenuto. ^^.

+1

La seconda soluzione è probabilmente il migliore, anche una parola di consiglio che ho trovato, assicurati di creare il tuo frammento usando il metodo newInstance e setArguments per passare i parametri a quel frammento in modo che siano disponibili in seguito. Vorrei averlo saputo quando ho iniziato a lol. – ksudu94

+0

se si utilizza un'interfaccia di richiamata, come è possibile salvare l'istanza di richiamata tramite setArguments? mi sembra un problema qualcuno ha un'idea? – ediBersh

risposta

5

La seconda soluzione è quella preferita, perché consente al frammento di essere più indipendente dalla sua attività di hosting.

Se in futuro si decide di inserire il frammento in un'attività diversa, non sono necessarie modifiche sul frammento e sarà necessario implementare l'interfaccia solo sulla propria attività.

Aggiungerò una terza soluzione che utilizza un bus eventi (ad esempio Otto), che funziona anche, sebbene alcuni potrebbero obiettare che rende il vostro codice un po 'meno leggibile.

+1

+1 per l'approccio bus evento, di gran lunga il migliore in pratica. – Snicolas

1

Il tuo secondo approccio è più flessibile. Potresti non vedere un enorme vantaggio in una sola attività e in un caso di frammento. Se devi usare lo stesso frammento in un'altra attività, molto probabilmente si romperà lanciando la tua attività in quel modo. Detto questo, non c'è niente di sbagliato nel primo approccio, ma è solo un po 'limitato.

1

Il primo modello è il migliore quando il frammento viene utilizzato solo da un'attività. Secondo approccio è necessario se si desidera che il frammento comunichi con altri oggetti non l'attività che ospita il frammento. Se si desidera sempre comunicare con l'attività di hosting, la callback non è necessaria. Basta creare un'interfaccia e implementarla su tutte le attività necessarie. Quindi nella tua attività di cast di frammenti restituita da getActivity().

MyInterface myInteface = (MyInterface) getActivity(); 
myinterface.somemethod(); 

Si può anche verificare se l'attività implementa l'interfaccia necessaria (s), ecc

1

L'approccio di interfaccia funziona bene ed è più flessibile in quanto non legare il vostro frammento all'attività direttamente. Una cosa che dovresti anche considerare è quanto lavoro l'attività potrebbe aver bisogno di fare, cioè può finire per gestire diversi frammenti. Questo ha la tendenza a portare a 'frammenti di grasso' come la mia domanda qui posta when I started using them

2

Il primo metodo sarà una cattiva pratica. Il secondo metodo funzionerà bene ma il tuo frammento sarà strettamente accoppiato con con la tua attività.

C'è un altro approccio migliore è quello di utilizzare qualche libreria bus evento come otto Usando questo è in grado di comunicare efficacemente con accoppiamento lasco nella vostra attività & frammento.

Problemi correlati