У меня есть кнопка с OnClickListener. Для иллюстративных целей рассмотрим кнопку, которая показывает модальный диалог:
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();
}
});
}
При нормальном использовании появляется диалоговое окно предупреждения и блокирует дальнейший ввод. Пользователи должны отменить диалог, прежде чем снова нажать кнопку.
Но иногда кнопка OnClickListener вызывается дважды, прежде чем появится диалоговое окно. Вы можете легко воспроизвести это достаточно быстро, нажав на кнопку очень быстро. Обычно я должен попробовать несколько раз, прежде чем это произойдет, но рано или поздно я вызову несколько вызовов onClick (...) до ввода диалоговых блоков.
Я вижу это поведение в Android 2.1 на телефоне Motorola Droid. Мы получили 4 отчета о сбоях на рынке, указав, что это случается с людьми.
В зависимости от того, что делают наши OnClickListeners, это приводит к разным хаосам. Как мы можем гарантировать, что блокирующие диалоги фактически блокируют ввод после первого нажатия?