Às vezes, o usuário clica no botão muito rápido ou duas vezes, se o botão realizar algum tipo de operação de rede, ele chamará a função várias vezes. Para evitar o clique duplo, você pode registrar a última vez que o botão foi clicado e compará-lo ao limite de tempo desejado.
private long lastClickTime = 0;
View.OnClickListener buttonHandler = new View.OnClickListener() {
public void onClick(View v) {
// preventing double, using threshold of 1000 ms
if (SystemClock.elapsedRealtime() - lastClickTime < 1000){
return;
}
lastClickTime = SystemClock.elapsedRealtime();
}
}