Tengo algunos fragmentos que necesitan mostrar un diálogo regular. En estos cuadros de diálogo, el usuario puede elegir una respuesta sí / no, y luego el fragmento debe comportarse en consecuencia.
Ahora, la Fragment
clase no tiene un onCreateDialog()
método para anular, así que supongo que tengo que implementar los diálogos afuera, en el contenedor Activity
. Está bien, pero luego es Activity
necesario informar la respuesta elegida de alguna manera al fragmento. Por supuesto, podría usar un patrón de devolución de llamada aquí, por lo que el fragmento se registra en la Activity
clase con un oyente, y la Actividad informaría la respuesta a través de eso, o algo así.
Pero esto parece ser un gran lío para una tarea simple como mostrar un diálogo "simple" sí-no en un fragmento. Además, de esta manera mi Fragment
sería menos autónomo.
¿Hay alguna forma más limpia de hacer esto?
Editar:
La respuesta a esta pregunta no explica realmente en detalle cómo se debe usar DialogFragments para mostrar los diálogos de Fragments. Entonces AFAIK, el camino a seguir es:
- Muestre un fragmento.
- Cuando sea necesario, cree una instancia de DialogFragment.
- Establezca el Fragmento original como el destino de este DialogFragment, con
.setTargetFragment()
. - Muestre el DialogFragment con .show () del Fragmento original.
- Cuando el usuario elige alguna opción en este DialogFragment, notifique al Fragmento original sobre esta selección (por ejemplo, el usuario hizo clic en 'sí'), puede obtener la referencia del Fragmento original con .getTarget ().
- Descarte DialogFragment.
fuente
Respuestas:
En su lugar, debería utilizar un DialogFragment .
fuente
Activity
por completo utilizando los métodosputFragment
ygetFragment
deFragmentManager
, lo que permiteDialogFragment
que informe directamente al fragmento de llamada (incluso después de cambios de orientación).Debo dudar con cautela de la respuesta previamente aceptada de que usar DialogFragment es la mejor opción. El propósito previsto (principal) de DialogFragment parece ser mostrar fragmentos que son diálogos en sí mismos, no mostrar fragmentos que tienen diálogos para mostrar.
Creo que usar la actividad del fragmento para mediar entre el diálogo y el fragmento es la opción preferible.
fuente
onCreateDialog
enfoque de los diálogos administrados ( ) pronto quedará obsoleto, no estoy de acuerdo y diría que eseDialogFragment
es el camino a seguir.Aquí hay un ejemplo completo de un DialogFragment sí / no:
La clase:
Para iniciar el diálogo:
También puede permitir que la clase implemente onClickListener y lo use en lugar de oyentes integrados.
Devolución de llamada a la actividad
Si desea implementar la devolución de llamada, así es como se hace en su actividad:
y
La clase de devolución de llamada:
Luego, para realizar una devolución de llamada desde un fragmento, debe asegurarse de que el oyente esté adjunto de esta manera:
Y una devolución de llamada se realiza así:
fuente
Para mí, fue lo siguiente:
MyFragment:
MyDialog:
Actividad:
Diseño de DialogFragment:
Como
dialogfragment_heightfixhiddenbtn
muestra el nombre , simplemente no pude encontrar una manera de arreglar que la altura del botón inferior se redujera a la mitad a pesar de decirlowrap_content
, así que agregué un botón oculto para que se "corte" por la mitad. Perdón por el truco.fuente
setTargetFragment()
es recreado correctamente por el sistema cuando reinicia el conjunto Actividad / Fragmento después de la rotación. Entonces, la referencia apuntará al nuevo objetivo automáticamente.public interface ShowDialog { void showDialog(DialogFragment dialogFragment); }
donde .test_dialog es de xml personalizado
fuente
Yo mismo soy un principiante y, sinceramente, no pude encontrar una respuesta satisfactoria que pudiera entender o implementar.
Así que aquí hay un enlace externo que realmente me ayudó a lograr lo que quería. Es muy sencillo y fácil de seguir.
http://www.helloandroid.com/tutorials/how-display-custom-dialog-your-android-application
ESTO LO QUE INTENTÉ LOGRAR CON EL CÓDIGO:
Tengo una MainActivity que aloja un Fragmento. Quería que apareciera un cuadro de diálogo en la parte superior del diseño para solicitar la entrada del usuario y luego procesar la entrada en consecuencia. Ver una captura de pantalla
Esto es lo que se ve en onCreateView de mi fragmento
Espero que te ayude
Avísame si hay alguna confusión. :)
fuente
fuente