2010-10-08 14 views

Respuesta

12

Cree un nuevo objeto de diálogo que amplíe ProgressDialog y luego anule el método public void onBackPressed() dentro de este.

+0

No es el botón cancelar, estoy hablando del 'botón Atrás' (uno de los botones físicos) en la parte inferior del teléfono. – michael

+0

¿Lo has probado? El botón Atrás debería disparar el evento cancelar. – AndrewKS

+0

No. No funciona. Establecí un punto de interrupción en onCancel(), nunca se llama. – michael

6

si no tiene suerte con el método onCancel(), puede escribir un método onKeyDown() en su actividad para comprobar si se muestra el cuadro de diálogo de progreso y si se presiona el botón Atrás ... o puede anular el método onBackPressed() (nuevamente, para la actividad) y verificar si su diálogo se está mostrando. alternativamente, puede extender la clase ProgressDialog y anular onBackPressed() directamente desde allí ... en cuyo caso no tendría que comprobar si se muestra el cuadro de diálogo.

por ejemplo. para el método de la actividad:

public void onBackPressed() 
{ 
    if (progressDialog.isShowing()) 
    { 
     // DO SOMETHING 
    } 
} 

la onKeyDown() método sería similar, sin embargo tendría que comprobar si el diálogo está mostrando, si el botón se presiona el botón es 'trasero', y también se debe hacer una llamada a super.onKeyDown() para asegurarse de que el método predeterminado también se ejecute.

public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if (keyCode == KeyEvent.KEYCODE_BACK && progressDialog.isShowing()) 
    { 
     // DO SOMETHING 
    } 

    // Call super code so we dont limit default interaction 
    super.onKeyDown(keyCode, event); 

    return true; 
} 

con cualquier método, la variable/propiedad progressDialog, obviamente, tiene que ser en su alcance y accesible.

0

Usted puede utilizar la llamada estática:

public static ProgressDialog show (Context context, CharSequence title, CharSequence message, boolean indeterminate, boolean cancelable, DialogInterface.OnCancelListener cancelListener) 

Sólo asegúrese de establecer cancelable = true y añadir la devolución de llamada cancelListener apropiado.

Ejemplo:

progressDialog = ProgressDialog.show(this, "Fetching data...", "Loading ...", true, true, this); 
0
progressbar.setcancellable(false); 

Funciona perfectamente, que estaba frente mismo problema y tengo la solución.

Cuestiones relacionadas