У меня есть кнопка с 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, это вызывает разного рода хаос. Как мы можем гарантировать, что блокирующие диалоги фактически блокируют ввод после первого нажатия?