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.

UserCase

Cuando sigo este caso de usuario

  1. Elegir una imagen en la posición 2
  2. Cierra el cuadro de diálogo
  3. Elija una imagen en la posición 6
  4. 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(); } }); } 

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' } 
  • Agregue RecyclerView (RecyclerFragment) a un cuadro de diálogo
  • ¿Cómo mostrar el cuadro de diálogo "Enviar comentarios a X"?
  • Android - Estilo AlertDialog
  • ClassCastException: android.support.v7.widget.LinearLayoutCompat $ LayoutParams no se puede convertir en android.widget.LinearLayout $ LayoutParams
  • ¿Cómo puedo establecer el orden de los botones positivo y negativo en AlertDialog?
  • Debe llamar a removeView () en el padre del niño primero con AlertView
  • ¿Cómo aplicar el tema ligero para la actividad y mantener el tema oscuro para los diálogos al mismo tiempo?
  • ¿Qué significa resid> = 0x0100000 en la fuente AlertDialog?
  • ¿Cómo hacer clic en 'Aceptar' en un AlertDialog a través de código?
  • Cómo incluir la vista de título personalizado con en AlertDialog en android?
  • Android AlertDialog con esquinas redondeadas
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.