Question: Comment créer un rappel d'un DialogFragment vers un autre Fragment. Dans mon cas, l'activité impliquée doit être complètement ignorante du DialogFragment.
Considérez que j'ai
public class MyFragment extends Fragment implements OnClickListener
Puis à un moment donné je pourrais faire
DialogFragment dialogFrag = MyDialogFragment.newInstance(this);
dialogFrag.show(getFragmentManager, null);
À quoi ressemble MyDialogFragment
protected OnClickListener listener;
public static DialogFragment newInstance(OnClickListener listener) {
DialogFragment fragment = new DialogFragment();
fragment.listener = listener;
return fragment;
}
Mais il n'y a aucune garantie que l'écouteur sera là si le DialogFragment s'arrête et reprend tout au long de son cycle de vie. Les seules garanties d'un Fragment sont celles transmises via un Bundle via setArguments et getArguments.
Il existe un moyen de référencer l'activité si ce doit être l'auditeur:
public Dialog onCreateDialog(Bundle bundle) {
OnClickListener listener = (OnClickListener) getActivity();
....
return new AlertDialog.Builder(getActivity())
........
.setAdapter(adapter, listener)
.create();
}
Mais je ne veux pas que l'activité écoute les événements, j'ai besoin d'un fragment. Vraiment, il peut s'agir de n'importe quel objet Java implémentant OnClickListener.
Prenons l'exemple concret d'un Fragment qui présente un AlertDialog via DialogFragment. Il a des boutons Oui / Non. Comment puis-je renvoyer ces boutons au fragment qui les a créés?
OnClickListener listener = (OnClickListener) getParentFragment();
DialogFragment à la place, et votre Fragment principal implémente l'interface comme vous l'avez fait à l'origine.