2012-04-23 62 views
6

tengo un ProgressDialog implementado como esto:¿Por qué mi ProgressDialog escucha en CUALQUIER TECLA (tacto) en lugar de botón retroceder para descartar?

// 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 cancelar (true) detiene el AsyncTask. Todo esto funciona bien

El problema es, que puedo cancelar la ProgressDialog con cualquier contacto al azar en mi pantalla. Quiero descartar el diálogo solo presionando el botón de retroceso. ¡Por favor, ayúdame! Gracias chicos.

Respuesta

7

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.

1

tratar a continuación la instrucción

no estoy seguro sobre el conjunto botón de cancelación ... he oído informes del método onCancel() no se active correctamente. Mi solución solo consiste en hacer un botón normal en el diálogo con una llamada para regresar 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(); 
} 

continuación, sólo tiene que utilizar un método simple llamada desde otras partes de su actividad

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

solución bastante simple, pero no el truco;) también acaba de señalar que cancelDialog es una actividad limpie variable, si se no necesita llamar desde otro lugar, entonces debería poder salirse con la suya limitando el alcance de la variable a ese método.

+0

Gracias, después de agregar 'cancelDialog.setCancelable (false);' a su código, esto funcionó para mí, pero encontré una solución más fácil de ver mi siguiente – GedankenNebel

+15

Encontré una solución con el 'progressDialog.setCanceledOnTouchOutside (false);':))) – GedankenNebel

+1

ok ...! Cualquier forma en que tu problema haya sido resuelto ...! Gracias..! – Dinesh

Cuestiones relacionadas