AlertDialog no se crea aunque invoco onCreateDialog en Android
Estoy enfrentando el siguiente problema.
Tengo una Gallery
imágenes y quiero abrir un AlertDialog
para mostrar alguna información relativa a la imagen AlertDialog
. La primera vez que haga clic en la imagen, se ejecuta muy bien. Pero los siguientes tiempos, aunque haga clic en una imagen diferente, el mismo diálogo aparece de nuevo.
- La actividad ha filtrado la ventana en el método alertDialog show ()
- Cómo agregar TextView y EditText utilizando AlertDialog predeterminado mediante programación
- Establecer la altura de un AlertDialog con una vista personalizada de cero tamaño intrísico
- Avisos legales de Google Maps API v2 Cadena demasiado larga
- Cómo cambiar el cuadro de diálogo de alerta divider color android
UserCase
Cuando sigo este caso de usuario
- Elegir una imagen en la posición 2
- Cierra el cuadro de diálogo
- Elija una imagen en la posición 6
- Cierra el cuadro de diálogo
, Obtengo estas impresiones:
click na galeria... position: 2 startUserInformationDialog()... `this.position`: 2 onCreateDialog on switch.. `this.position`: 2 DISMISSING DIALOG `this.position`: 2 click na galeria... position: 6 startUserInformationDialog()... `this.position`: 6 DISMISSING DIALOG `this.position`: 6
Esto significa que el código no se está ejecutando a través de la onCreateDialog
CÓDIGO
public AlertDialog createUserInformationAlertDialog() { LayoutInflater inflater = getLayoutInflater(); View dialoglayout = inflater.inflate(R.layout.dialog_user_info, (ViewGroup) findViewById(R.id.dialog_user_layout_root)); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setView(dialoglayout); final MyObject ea = myList.get(positionUserToHaveInformationDisplayedOnTheDialog); // Setting values according to element to be shown TextView textView = (TextView) dialoglayout .findViewById(R.id.user_name_value); textView.setText(ea.getName()); ... builder.setNegativeButton(Locale_PT_BR.BACK, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { Log.d("PRINT 1", "DISMISSING DIALOG `this.position`: " + positionUserToHaveInformationDisplayedOnTheDialog); dialog.dismiss(); } }); return builder.create(); } private void startUserInformationDialog() { Log.d("PRINT 2", "startUserInformationDialog()... `this.position`: " + positionUserToHaveInformationDisplayedOnTheDialog); showDialog(DIALOG_USER_INFORMATION); } @Override protected Dialog onCreateDialog(int id) { switch (id) { case DIALOG_USER_INFORMATION: Log.d("PRINT 3", "onCreateDialog on switch.. `this.position`: " + positionUserToHaveInformationDisplayedOnTheDialog); return createUserInformationAlertDialog(); default: return null; } } private void startGallery() { myPhotoBar = (Gallery) findViewById(R.id.gallery); myPhotoBar.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView parent, View v, int position, long id) { Log.d("PRINT 4", "click na galeria... position: " + position); positionUserToHaveInformationDisplayedOnTheDialog = position; startUserInformationDialog(); } }); }
- Cómo cambiar el color de fondo del cuadro de diálogo de alerta predeterminado de Android
- Cambiar fuente en AlertDialog
- Período de tiempo de ejecución de Marshmallow
- Android Alert Dialog reemplaza el color azul por defecto con otro color
- AlertDialog con vista personalizada: redimensionar para ajustar el contenido de la vista
- ¿Cómo puedo mostrar una vista de lista en un cuadro de diálogo de alerta de Android?
- GetActivity () es nulo dentro de AlertDialog de un fragmento
- ¿Cómo mostrar AlertDialog en un fragmento?
Use el método onPrepareDialog()
para rellenar el diálogo con los datos. Si desea que se destruya el diálogo, debe llamar removeDialog()
método removeDialog()
.
Creo que showDialog sólo llama aCreateDialog una vez, si el ID es el mismo. Si desea actualizar un diálogo que ya se ha creado, puede sustituir onPrepareDialog para actualizar lo que quiera antes de que se muestre al usuario.
Y está bien porque si ves el documento , el onCreateDialog es llamada en la primera vez.
"Cuando se solicita un cuadro de diálogo por primera vez , Android llama aCreateDialog (int) de su actividad, que es donde debe instanciar el cuadro de diálogo.Este método de devolución de llamada se pasa el mismo ID que pasó a showDialog (int). el cuadro de diálogo, devolver el objeto al final del método. "
Usted necesita saber que esto será creado una vez.
Llamar aPrepareDialog .
"Antes de que aparezca el cuadro de diálogo, Android también llama al método de rellamada opcional onPrepareDialog (int, Dialog). Defina este método si desea cambiar las propiedades del cuadro de diálogo cada vez que se abre.Este método se llama cada vez que se abre un diálogo , mientras que onCreateDialog (int) sólo se llama la primera vez que se abre un cuadro de diálogo.Si no define onPrepareDialog (), entonces el cuadro de diálogo seguirá siendo el mismo que era la vez anterior que se abrió.Este método también se pasa el ID del diálogo, junto con el objeto de Diálogo que creó en onCreateDialog (). "
Puede probar esta sencilla biblioteca emergente de diálogo de Android . Es muy simple de usar en su actividad.
sólo una línea de código es suficiente para crear un diálogo si no necesita funcionalidad compleja alrededor.
Pop.on(activity).with().title(R.string.title).body(R.string.body).show();
Solo incluye la siguiente lib en tus dependencias de gradle
dependencies { compile 'com.vistrav:pop:2.0' }