J'ai un bouton avec un OnClickListener. À titre d'exemple, envisager un bouton qui affiche une boîte de dialogue modale:Traitement des touches rapides sur les boutons
public class SomeActivity ... {
protected void onCreate(Bundle state) {
super.onCreate(state);
findViewById(R.id.ok_button).setOnClickListener(
new View.OnClickListener() {
public void onClick(View v) {
// This should block input
new AlertDialog.Builder(SomeActivity.this)
.setCancelable(true)
.show();
}
});
}
En utilisation normale, la boîte de dialogue d'alerte apparaît et les blocs d'entrée plus loin. Les utilisateurs doivent fermer la boîte de dialogue avant de pouvoir appuyer à nouveau sur le bouton.
Mais parfois, le OnClickListener du bouton est appelé deux fois avant que la boîte de dialogue ne s'affiche. Vous pouvez reproduire cela assez facilement en tapant très vite sur le bouton. Je dois généralement essayer plusieurs fois avant que cela ne se produise, mais tôt ou tard je déclencherai plusieurs appels onClick (...) avant que la boîte de dialogue bloque l'entrée.
Je vois ce comportement dans Android 2.1 sur le téléphone Motorola Droid. Nous avons reçu 4 rapports d'accident dans le Market, indiquant que cela arrive parfois aux gens. En fonction de ce que font nos OnClickListeners, cela provoque toutes sortes de dégâts. En fonction de ce que font nos OnClickListeners. Comment pouvons-nous garantir que les boîtes de dialogue de blocage bloquent réellement l'entrée après le premier tapotement?
Avez-vous essayé de créer le AlertDialog en dehors de onClick() et appelez simplement show() dans onClick()? – jfpoilpret