Ricavare i dati da una window di dialogo di frammentazione – le migliori pratiche?

Sto convertendo un po 'del mio progetto ad utilizzare frammenti. Come facciamo a comunicare con una window di dialogo di frammento? Vorrei creare una window di dialogo di frammenti solo per get un text di input dall'utente. Quando la window di dialogo viene respinta, vorrei passare il text inserito al frammento "padre" (quello che l'ha iniziato). Esempio:

public class MyFragment extends Fragment { public void onBtnClick() { // What's a good way to get data back from this dialog // once it's dismissed? DialogFragment dlgFrag = MyFragmentDialog.newInstance(); dlgFrag.show(getFragmentManager(), "dialog"); } } 

Grazie

  • Animare l'icona del cassetto in freccia su setDisplayHomeAsUpEnabled?
  • Android Visualizza Clipping
  • Come rilevare gli events di touch sulla casella di controllo distriggersta in android
  • Data binding di Android (simile a WPF)?
  • Android Studio - L'emulatore Tablet non mostra la risoluzione corretta
  • android Visualizza la differenza di performanceClick () e callOnClick ()
  • 2 Solutions collect form web for “Ricavare i dati da una window di dialogo di frammentazione – le migliori pratiche?”

    Un ottimo modo per passare questo tipo di events è un'interface di chiamata come descritto nella Guida per gli sviluppatori di Android

    Il tuo frammento definisce un'interface di chiamata come

     public class MyFragment extends Fragment { ... // Container Activity must implement this interface public interface OnArticleSelectedListener { public void onArticleSelected(Uri articleUri); } ... } 

    Quindi si verifica all'interno del metodo onAttach se il Parente ha implementato l'interface di chiamata e salva l'istanza.

     @Override public void onAttach(Activity activity) { super.onAttach(activity); try { mListener = (OnArticleSelectedListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnArticleSelectedListener"); } } 

    quando si verifica l'evento all'interno del frammento è sufficiente call il gestore di chiamata

     mListener.onArticleSelected(...); 

    Spero che aiuta, ulteriori informazioni qui

    Come ha detto eternalmatt, la soluzione data non risponde veramente alla domanda. Il modo per comunicare la window di dialogo con il frammento sta chiamando:

     dialog.setTargetFragment(myCallingFragment, requestCode); 

    Il modo in cui faccio questo è creare la FragmentDialog con un metodo statico in cui l'ascoltatore viene instanciato e quindi fare la roba setFragmentTarget() :

     public mySuperFragmentDialog extends DialogFragment { public interface SuperListener{ void onSomethingHappened(); } public static mySuperFragmentDialog newInstance(SuperListener listener){ MySuperFagmentDialog f = new MySuperFragmentDialog(); f.setTargetFragment((Fragment) listener, /*requestCode*/ 1234); return f; } } 

    Per creare la window di dialogo dal frammento fai semplicemente come al solito:

     Dialog dialog = MySuperFragmentDialog.newInstance(parentFragment); dialog.show(); 

    Allora quando vuoi comunicare con il frammento che chiama la window di dialogo:

     Fragment parentFragment = getTargetFragment(); ((SuperListener) parentFragment).onSomethingHappened(); 

    Questa soluzione funziona solo quando verranno create dialoghi da Frames e non da Attività, ma è ansible combinare entrambi i methods ( 'setFragmentTarget()' e 'onAttach()' ) e alcuni controlli di Classe per fornire una soluzione completa.

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