2010-11-27 15 views
8

He estado desarrollando una aplicación para Android.Diálogo de alerta de Android: cómo ocultar el botón Aceptar después de presionarlo

Me gustaría ocultar el botón Aceptar después de que el usuario lo presiona, ya que la ventana de diálogo permanecerá en primer plano durante unos segundos mientras se lleva a cabo un cálculo.

Este es el código:

new AlertDialog.Builder(this) 
    .setMessage("This may take a while") 
    .setPositiveButton("OK", new android.content.DialogInterface.OnClickListener() {     
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
         // hide the OK button - how? 
         // a lot of computation 
     } 
    }) 
    .show(); 

¿Cómo puedo lograr eso?

P.S .: No me interesan las técnicas más avanzadas para manejar un cálculo (como: diálogos de progreso, multi-threading).

Gracias.

+6

Si tiene la intención de hacer un cálculo de larga duración en el hilo de la interfaz de usuario, prepárese para que los usuarios le den muchos comentarios negativos cuando la aplicación active los errores de la aplicación que no responde. – adamp

+1

Para evitar errores de "aplicación no responde", debe ejecutar su cálculo en un ['AsyncTask'] (http://developer.android.com/reference/android/os/AsyncTask.html). – sulai

Respuesta

19
.setPositiveButton("OK", new android.content.DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     ((AlertDialog)dialog).getButton(which).setVisibility(View.INVISIBLE); 
     // the rest of your stuff 
    } 
}) 
+2

Sin embargo, parece que su diseño no es perfecto en esta parte. Probablemente sería mejor usar 'AsyncTask' con' ProgressDialog'. AsyncTask permite ejecutar cómputos largos en un hilo de fondo para que el hilo principal de UI no esté bloqueado y, por lo tanto, la aplicación no obtendrá un ANR. –

+0

¿Hay alguna manera de deshabilitar el botón depende de un campo de texto en la barra de diálogo? – akd

+0

@akdurmus: Creo que debería haber una manera, sin embargo, por favor haga una nueva pregunta sobre esto. –

-3

Puede establecer la visibilidad del botón en invisible.

ok.setVisibility(View.INVISIBLE); 
+4

, pero ¿cómo puedo obtener la variable 'ok'? – dan

0
setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int id) { 
     dialog.dismiss(); 

donde es dialogDialogInterface.

Cuestiones relacionadas