Frage: Wie erstellt man einen Rückruf von einem DialogFragment zu einem anderen Fragment? In meinem Fall sollte die betreffende Aktivität das DialogFragment überhaupt nicht kennen.
Betrachten Sie ich habe
public class MyFragment extends Fragment implements OnClickListener
Dann könnte ich irgendwann tun
DialogFragment dialogFrag = MyDialogFragment.newInstance(this);
dialogFrag.show(getFragmentManager, null);
Wo MyDialogFragment aussieht
protected OnClickListener listener;
public static DialogFragment newInstance(OnClickListener listener) {
DialogFragment fragment = new DialogFragment();
fragment.listener = listener;
return fragment;
}
Es gibt jedoch keine Garantie dafür, dass der Listener verfügbar ist, wenn das DialogFragment angehalten und während seines Lebenszyklus fortgesetzt wird. Die einzigen Garantien in einem Fragment sind diejenigen, die über setArguments und getArguments durch ein Bundle übergeben werden.
Es gibt eine Möglichkeit, auf die Aktivität zu verweisen, wenn es sich um den Listener handeln soll:
public Dialog onCreateDialog(Bundle bundle) {
OnClickListener listener = (OnClickListener) getActivity();
....
return new AlertDialog.Builder(getActivity())
........
.setAdapter(adapter, listener)
.create();
}
Aber ich möchte nicht, dass die Aktivität auf Ereignisse wartet, ich brauche ein Fragment. Wirklich, es könnte jedes Java-Objekt sein, das OnClickListener implementiert.
Betrachten Sie das konkrete Beispiel eines Fragments, das einen AlertDialog über DialogFragment darstellt. Es hat Ja / Nein-Tasten. Wie kann ich diese Tastendrücke an das Fragment zurücksenden, das sie erstellt hat?
OnClickListener listener = (OnClickListener) getParentFragment();
in DialogFragment verwenden können und Ihr Hauptfragment die Schnittstelle wie ursprünglich implementiert.