При быстром нажатии на кнопку обработчик может вызватся несколько раз (даже если заблокировать кнопку в обработчике), что ведет к двойным диалоговым окнам, двойными сетевыми запросами, двойным записям в БД и тд. Погуглив я понял, что проблема давно существует и все справляются с ней по разному, например с помощью флага в обработчике. Я пока решил проблему создав кастомный обработчик, который срабатывает не чаще чем 300мс:
public abstract class ClickListener implements View.OnClickListener{
private long lastCallTime;
@Override
public void onClick(View v) {
if (System.currentTimeMillis() - lastCallTime >= 300) {
clickHandler(v);
}
lastCallTime = System.currentTimeMillis();
}
public abstract void clickHandler(View v);
}
Есть ли глобальное решение проблемы не требущее использования своего обработчика?
И в чем причина такого поведения?