Это на самом деле удивительно сложная проблема.Корень проблемы заключается в том, что события пользовательского интерфейса (например, нажатие кнопки) приводят к тому, что messages «отправляется» в конец очереди сообщений.Если вы достаточно быстры, многие из этих сообщений могут быть отправлены в очередь сообщений до того, как будет обработана первая.
Это означает, что даже отключение кнопки внутри вашего метода onClick()
не будет действительнорешить проблему (поскольку отключение не произойдет до тех пор, пока не будет обработано первое сообщение, но в очереди сообщений уже может быть три других дублирующих сообщения).
Лучше всего отслеживатькакой-то логический флаг и проверяет флаг каждый раз внутри onClick()
:
private boolean firstClick = true;
button.setOnClickListener(v -> {
if (firstClick) {
firstClick = false;
// do your stuff
}
});
Вы должны помнить, чтобы сбросить firstClick
обратно в true, когда вы хотитеРазумеется, снова включите нажатие кнопок.