Ich habe eine Schaltfläche mit einem OnClickListener. Betrachten wir zur Veranschaulichung eine Schaltfläche, die einen modalen Dialog anzeigt:
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();
}
});
}
Bei normaler Verwendung erscheint der Warndialog und blockiert weitere Eingaben. Der Benutzer muss das Dialogfeld schließen, bevor er erneut auf die Schaltfläche tippen kann.
Aber manchmal wird der OnClickListener der Schaltfläche zweimal aufgerufen, bevor der Dialog erscheint. Sie können dies ganz einfach duplizieren, indem Sie sehr schnell auf die Schaltfläche tippen. Ich muss es in der Regel mehrmals versuchen, bevor es passiert, aber früher oder später werde ich mehrere onClick(...)-Aufrufe auslösen, bevor der Dialog die Eingabe blockiert.
Ich sehe dieses Verhalten in Android 2.1 auf dem Motorola Droid Telefon. Wir haben 4 Absturzberichte im Market erhalten, die darauf hinweisen, dass dieses Verhalten gelegentlich auftritt.
Je nachdem, was unsere OnClickListeners tun, verursacht dies alle Arten von Verwüstung. Wie können wir garantieren, dass blockierende Dialoge Eingaben nach dem ersten Antippen tatsächlich blockieren?