Кнопка запускает действие, которое следует вызывать только один раз. Кнопка будет отключена и скрыта в обработчике onClick до того, как действие будет выполнено:
someButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
someButton.setEnabled(false);
someButton.setClickable(false);
someButton.setVisibility(View.GONE);
performTaskOnce();
}
});
private void performTaskOnce() {
Log.i("myapp", "Performing task");
//Do something nontrivial that takes a few ms (like changing the view hierarchy)
}
Несмотря на то, что кнопка сразу отключена, тем не менее, можно запускать несколько событий "onClick", нажав несколько раз очень быстро. (т.е. performTaskOnce
называется многократным). Кажется, что события onClick поставлены в очередь до того, как кнопка фактически отключена.
Я мог бы исправить эту проблему, проверив каждый обработчик onClick, будет ли соответствующая кнопка уже отключена, но это похоже на взлома. Есть ли лучший способ избежать этой проблемы?
Проблема возникает на Android 2.3.6, я не могу воспроизвести ее на Android 4.0.3. Но, учитывая редкость устройств 4.x, не исключено исключение старых устройств.