2010-11-27 21 views
8

J'ai développé une application Android.Boîte de dialogue d'alerte Android - comment masquer le bouton OK après avoir été appuyé

Je souhaite masquer le bouton OK après que l'utilisateur a appuyé dessus, car la fenêtre de dialogue restera à l'avant-plan pendant quelques secondes pendant le calcul.

Voici le code:

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(); 

Comment puis-je y parvenir?

P.S .: Je ne suis pas intéressé par des techniques plus avancées pour gérer un calcul (tel que: dialogues de progression, multi-threading).

Merci.

+6

Si vous avez l'intention de faire un calcul de longue durée sur le thread de l'interface utilisateur, préparez-vous à ce que vos utilisateurs vous donnent beaucoup de commentaires négatifs lorsque votre application déclenche l'application ne répondant pas aux erreurs. – adamp

+1

Pour éviter les erreurs "ne répondant pas à l'application", vous devez exécuter votre calcul dans un ['AsyncTask'] (http://developer.android.com/reference/android/os/AsyncTask.html). – sulai

Répondre

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

Cependant, il semble que votre design ne soit pas parfait dans cette partie. Il serait probablement préférable d'utiliser 'AsyncTask' avec' ProgressDialog'. AsyncTask permet d'exécuter de longs calculs sur un thread d'arrière-plan afin que votre thread d'interface utilisateur principal ne soit pas bloqué et que l'application n'obtienne pas d'ANR. –

+0

Y at-il un moyen de désactiver le bouton dépend d'un champ de texte sur la barre de dialogue? – akd

+0

@akdurmus: Je crois qu'il devrait y avoir un moyen, cependant s'il vous plaît poser une nouvelle question à ce sujet. –

-3

Vous pouvez définir la visibilité du bouton sur invisible.

ok.setVisibility(View.INVISIBLE); 
+4

mais comment puis-je obtenir la variable 'ok'? – dan

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

dialog est DialogInterface.