Come passare i dati tra più Frammenti in Android

Nella mia attività principale, ho un DialogFragment che contiene un FragmentTabHost. Ho due tabs, uno che è un DialogFragment e uno che è un frammento di liste. Quando si preme il tasto 'OK' nel DialogFragment interno o quando viene premuto un elemento nella ListaFragmento, voglio passare due Strings (inseriti in due TextView nel DialogFragment interno e visualizzati in ciascun elemento del frammento di elenco) torna all'attività, ma non sono sicuro di come farlo con più livelli di frammenti.

Qualsiasi aiuto è apprezzato!

  • Come aggiungere più intestazioni in un unico ListView con addHeaderView ()?
  • Ottenere il colore di default selezionato di Listview, a seconda del dispositivo
  • Contenuti che non vengono visualizzati in TableLayout android Android
  • Devo imparare l'Inventor di Google App come integrazione di Java per Android
  • android GCM non funziona
  • I comandi di Gradle non sono riusciti nell'image di API 23 API di Google API (armeabi-v7a)
  • l'esecuzione di Android Studio in Windows 7 non riesce, nessun SDK di Android trovato
  • Attività di riavvio in rotazione Android
  • Sostituisci il gesto di Google Now
  • Richiesta post di HTTP: errore 400, messaggistica a tema firebase
  • Android Posso utilizzare JOIN alla query mediastore
  • RxJava / RxAndroid - gestisce più modifiche EditText
  • 2 Solutions collect form web for “Come passare i dati tra più Frammenti in Android”

    Non c'è magia.

    Puoi raggiungere con due approcci.

    1. Usare il richiamo.

    Crea interface e class per passare i dati attraverso il frammento di bambini in attività. Non è necessario modificare il frammento di TabHostFragment quanto il frammento si affida sempre alla sua context madre (attività), non import quanti frammenti avvolgono il frammento.

     public class TwoStrings { public TwoStrings(String one, String two){ this.one = one; this.two = two; } public String one; public String two; } 

    Innanzitutto, dichiarare l'interface.

     public interface DataPassListener { void dataPassed(TwoStrings data); } 

    E, implementa l'interface in Attività.

     public class MainActivity extends Activity implements DataPassListener { @Override public void dataPassed(TwoStrings data) { // do something with data. Log.d("string one", data.one); Log.d("string two", data.two); } } 

    Infine, lasciare che il frammento del figlio riconosca che l'attività madre ha l'ascoltatore di richiamata.

     public class DialogFragment1 extends DialogFragment { DataPassListener listener; @Override public void onAttach(Activity activity) { if (activity instanceOf DataPassListener) listener = (DataPassListener) activity; } public void setDataPassListener(DataPassListener listener){ listener = ((DataPassListener) listener); } public void doSomeThing(){ if(listener != null) // importnt to prevent NullPointerException listener.dataPassed("a", "b"); } } 
    1. Utilizza EventBus.

    Preferisco usare Otto per pubblicare e sottoscrivere i dati.

    Per sottoscrivere l'evento per l'ascolto in Attività,

     public class MainActivity extends Activity { @Override public void onResume() { super.onResume(); BusProvider.getInstance().register(this); } @Override public void onPause() { super.onPause(); BusProvider.getInstance().unregister(this); } @Subscribe public void onUpdateTwoStrings(TwoStrings event) { // do something with data. Log.d("string one", data.one); Log.d("string two", data.two); } } 

    E, pubblica l'evento in qualsiasi parte del frammento.

     bus.post(new TwoStrings("a", "b")); 

    Date un'occhiata ai methods setTargetFragment () e getTargetFragment () . Potresti colbind frammenti tra di loro attraverso di essa senza ulteriori richiami e librerie.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.