11
votes

Dialogue d'alerte Android - Comment masquer le bouton OK après avoir été enfoncé

J'ai développé une application Android.

Je souhaite cacher le bouton OK après l'appui de l'utilisateur, car la fenêtre de dialogue restera au premier plan pendant quelques secondes pendant que un calcul a lieu.

Ceci est le code: xxx

Comment puis-je atteindre cela?

PS: Je ne suis pas intéressant à des techniques plus avancées pour gérer un calcul (tels que: dialogues de progression, multi-filetage).

Merci.


2 commentaires

Si vous souhaitez effectuer un calcul à long terme sur le thread de l'interface utilisateur, préparez-vous à vos utilisateurs vous donnant beaucoup de commentaires négatifs lorsque votre application déclenche une application ne répondant pas aux erreurs.


Pour empêcher les erreurs "Application ne répondant pas", vous devez exécuter votre calcul dans un AsynccTask .


4 Réponses :


-3
votes

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

ok.setVisibility(View.INVISIBLE);


1 commentaires

Mais comment puis-je obtenir la variable "OK"?



22
votes
.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
    }
})

4 commentaires

Cependant, il semble que votre conception n'est pas parfaite dans cette partie. Il serait probablement préférable d'utiliser asynctack avec progressdialog . AsynccTask permet d'exécuter des calculs longs sur un thread de fond afin que votre fil d'interface utilisateur principal n'est pas bloqué et que l'application n'obtiendra pas une ANR.


Existe-t-il un moyen de désactiver le bouton dépend d'un champ de texte sur la barre de dialogue?


@akdurmus: Je crois qu'il devrait y avoir un moyen, cependant, veuillez poser une nouvelle question à ce sujet.


Au lieu de la faire disparaître, je voudrais juste le désactiver. .Setensible (FALSE) Il est moins Jarring pour l'utilisateur. En outre, utilisez certainement un alertdialog à l'intérieur de asynccttack au lieu d'un alertdialog .



1
votes
setPositiveButton("Ok", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int id) {
        dialog.dismiss();
where dialog is DialogInterface.

0 commentaires

1
votes

Pour quelqu'un d'autre essayant de désactiver le bouton positif sur un alertdialog , beaucoup de ces solutions ne semblent pas fonctionner maintenant - vous ne pouvez pas saisir une référence au bouton dès que vous appelez créer sur le alertdialog.builder , il vient de renvoyer NULL.

Un endroit qu'il devrait être disponible est dans Onresume , Donc, comme je l'ai eu pour travailler était quelque chose comme ceci: xxx

et de cette façon, vous devez avoir une référence disponible chaque fois que votre fragment est en cours d'exécution, vous pouvez donc simplement appeler positifbutton.isenabled = false chaque fois que vous devez le désactiver.

Soyez juste prudent avec votre état, un fragment recréé peut avoir des boîtes à cochées ou autre, mais cela n'aura pas que < Code> PositiersButton Référence, et il réexécutera ce code dans OnResume . Donc, si vous devez effectuer une initialisation (comme désactivation du bouton jusqu'à ce que l'utilisateur sélectionne une option) Assurez-vous d'appeler une fonction qui vérifie l'état actuel et décide si le bouton doit être activé ou non. Ne supposez pas que c'est juste en train de démarrer blanc!


0 commentaires