J'ai quelques fragments qui doivent montrer un dialogue régulier. Dans ces boîtes de dialogue, l'utilisateur peut choisir une réponse oui / non, puis le fragment doit se comporter en conséquence.
Maintenant, la Fragment
classe n'a pas de onCreateDialog()
méthode à remplacer, donc je suppose que je dois implémenter les dialogues à l'extérieur, dans le contenant Activity
. Ce n'est pas grave, mais il est alors Activity
nécessaire de rapporter la réponse choisie d'une manière ou d'une autre au fragment. Je pourrais bien sûr utiliser un modèle de rappel ici, de sorte que le fragment s'enregistre lui-même auprès Activity
d'une classe d'auditeur, et l'activité rapporterait la réponse à travers cela, ou quelque chose comme ça.
Mais cela semble être un gros gâchis pour une tâche simple comme l'affichage d'un "simple" dialogue oui-non dans un fragment. De plus, de cette façon, je Fragment
serais moins autonome.
Y a-t-il un moyen plus propre de le faire?
Éditer:
La réponse à cette question n'explique pas vraiment en détail comment utiliser DialogFragments pour afficher des boîtes de dialogue à partir de Fragments. Alors AFAIK, la voie à suivre est:
- Affichez un fragment.
- Si nécessaire, instanciez un DialogFragment.
- Définissez le fragment d'origine comme cible de ce DialogFragment, avec
.setTargetFragment()
. - Afficher le DialogFragment avec .show () du fragment d'origine.
- Lorsque l'utilisateur choisit une option sur ce DialogFragment, informez le Fragment d'origine de cette sélection (par exemple, l'utilisateur a cliqué sur «oui»), vous pouvez obtenir la référence du Fragment d'origine avec .getTarget ().
- Ignorez le DialogFragment.
la source
Réponses:
Vous devez utiliser un DialogFragment à la place.
la source
Activity
entièrement le en utilisant les méthodesputFragment
etgetFragment
deFragmentManager
, ce qui permet au deDialogFragment
faire rapport directement au fragment appelant (même après des changements d'orientation).Je dois douter avec prudence de la réponse précédemment acceptée selon laquelle l'utilisation d'un DialogFragment est la meilleure option. Le but (principal) prévu de DialogFragment semble être d'afficher des fragments qui sont eux-mêmes des boîtes de dialogue, et non d'afficher des fragments qui ont des boîtes de dialogue à afficher.
Je pense que l'utilisation de l'activité du fragment pour servir d'intermédiaire entre le dialogue et le fragment est l'option préférable.
la source
onCreateDialog
approche des dialogues gérés ( ) est bientôt obsolète, je ne suis pas d'accord et je dirais queDialogFragment
c'est effectivement la voie à suivre.Voici un exemple complet de DialogFragment oui / non:
La classe:
Pour démarrer le dialogue:
Vous pouvez également laisser la classe implémenter onClickListener et l'utiliser à la place des écouteurs intégrés.
Rappel à l'activité
Si vous souhaitez implémenter le rappel, voici comment cela se fait dans votre activité:
et
La classe de rappel:
Ensuite, pour effectuer un rappel à partir d'un fragment, vous devez vous assurer que l'auditeur est attaché comme ceci:
Et un rappel est effectué comme ceci:
la source
Pour moi, c'était le suivant-
MyFragment:
MyDialog:
Activité:
Disposition DialogFragment:
Comme son nom l'
dialogfragment_heightfixhiddenbtn
indique, je ne pouvais tout simplement pas trouver un moyen de corriger le fait que la hauteur du bouton du bas était réduite de moitié malgré le faitwrap_content
que je l'ai dit , alors j'ai ajouté un bouton caché pour être "coupé" en deux à la place. Désolé pour le hack.la source
setTargetFragment()
est recréé correctement par le système lorsqu'il redémarre le jeu d'activité / fragment après la rotation. Ainsi, la référence pointera automatiquement vers la nouvelle cible.public interface ShowDialog { void showDialog(DialogFragment dialogFragment); }
où .test_dialog est de xml personnalisé
la source
Je suis moi-même un débutant et je n'ai honnêtement pas trouvé de réponse satisfaisante que je pourrais comprendre ou mettre en œuvre.
Voici donc un lien externe qui m'a vraiment aidé à réaliser ce que je voulais. C'est très simple et facile à suivre également.
http://www.helloandroid.com/tutorials/how-display-custom-dialog-your-android-application
CE QUE J'AI ESSAYÉ D'OBTENIR AVEC LE CODE:
J'ai une MainActivity qui héberge un Fragment. Je voulais qu'une boîte de dialogue apparaisse en haut de la mise en page pour demander une entrée utilisateur, puis traiter l'entrée en conséquence. Voir une capture d'écran
Voici à quoi ressemble onCreateView de mon fragment
J'espère que ça t'aidera
Faites-moi savoir s'il y a une confusion. :)
la source
la source