¿Por qué mi ProgressDialog está escuchando en CUALQUIER TECLA (táctil) en lugar de retroceder?

Tengo un ProgressDialog implementado de esta manera:

// show progress dialog while date is loading progressDialog = ProgressDialog.show(XYActivity.this, getResources().getString(R.string.progress_dialog_please_wait), getResources().getString(R.string.progress_dialog_loading), true); progressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { cancel(true); Log.w(LOGTAG, "loading cancelled via back button"); } }); progressDialog.setCancelable(true); 

Este ProgressDialog se implementa dentro de un AsyncTask (PreExecute), por lo que el método de cancelación (true) detiene el AsyncTask. Todo esto funciona bien.

El problema es que puedo cancelar el ProgressDialog con cualquier toque aleatorio en mi pantalla. Quiero descartar el diálogo sólo pulsando el botón de retroceso. ¡Por favor, ayúdame! Gracias chicos.

    Esto funcionó para mí:

     @Override protected void onPreExecute() { progressDialog = ProgressDialog.show(context, "Title", "Loading...", true, true, new OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { cancel(true); } }); progressDialog.setCanceledOnTouchOutside(false); } 

    El setCanceledOnTouchOutside sugerido por GedankenNebel es bastante limpio.

    Prueba debajo de la instrucción

    No estoy seguro sobre el botón de cancelar todo … He oído informes de la onCancel () método no disparar correctamente. Mi solución sólo consiste en hacer un botón normal en el diálogo con una llamada para volver cada vez que se presiona el botón.

     private void createCancelProgressDialog(String title, String message, String buttonText) { cancelDialog = new ProgressDialog(this); cancelDialog.setTitle(title); cancelDialog.setMessage(message); cancelDialog.setButton(buttonText, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // Use either finish() or return() to either close the activity or just the dialog cancelDialog.dismiss(); } }); cancelDialog.show(); } 

    Simplemente utilice un método de llamada simple de otra parte de su actividad

     createCancelProgressDialog("Loading", "Please wait while activity is loading", "Cancel"); 

    Una solución bastante simple, pero hace el truco;) también sólo para notar que cancelDialog es una variable de limpieza de la actividad, si usted no necesita llamar desde otro lugar, entonces debería ser capaz de salirse con sólo limitar el alcance de la variable a Método.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.