Question : Comment créer un callback d'un DialogFragment vers un autre Fragment. Dans mon cas, l'activité concernée doit ignorer complètement le DialogFragment.
Considérez que j'ai
public class MyFragment extends Fragment implements OnClickListener
Puis, à un moment donné, j'ai pourrait faire
DialogFragment dialogFrag = MyDialogFragment.newInstance(this);
dialogFrag.show(getFragmentManager, null);
Où MyDialogFragment se présente comme suit
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 présent si le DialogFragment s'interrompt et reprend au cours de son cycle de vie. Les seules garanties dans un fragment sont celles transmises par un Bundle via setArguments et getArguments.
Il existe un moyen de référencer l'activité si elle doit être l'écouteur :
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. En fait, il peut s'agir de n'importe quel objet Java qui implémente OnClickListener.
Prenons l'exemple concret d'un Fragment qui présente un AlertDialog via un DialogFragment. Il comporte des boutons Oui/Non. Comment puis-je renvoyer ces pressions sur les boutons au Fragment qui l'a créé ?
0 votes
Vous avez mentionné "Mais il n'y a aucune garantie que l'écouteur sera présent si le DialogFragment s'interrompt et reprend au cours de son cycle de vie". Je pensais que l'état des fragments était détruit lors de la fonction onDestroy() ? Vous devez avoir raison, mais je suis un peu confus quant à l'utilisation de l'état des fragments maintenant. Comment puis-je reproduire le problème que vous avez mentionné, l'écouteur n'est pas là ?
0 votes
Je ne vois pas pourquoi vous ne pouvez pas simplement utiliser
OnClickListener listener = (OnClickListener) getParentFragment();
dans DialogFragment à la place, et votre Fragment principal implémente l'interface comme vous l'avez fait à l'origine.0 votes
Voici une réponse à une question qui n'a rien à voir, mais qui vous montre comment procéder de manière propre. stackoverflow.com/questions/28620026/