Un pulsante attiva un'azione che deve essere richiamata una sola volta. Il pulsante è disabilitato e nascosta nel gestore onClick prima che venga eseguita l'azione:Android: impedisce più eventi onClick su un pulsante (che è stato disabilitato)
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)
}
Anche se il pulsante è disabilitato immediatamente, è comunque possibile attivare più eventi "onclick" toccando più volte molto rapidamente. (Ad esempio, performTaskOnce
viene chiamato più volte). Sembra che gli eventi onClick siano in coda prima che il pulsante sia effettivamente disabilitato.
Potrei risolvere il problema controllando in ogni singolo handle onClick se il pulsante corrispondente è già disabilitato ma sembra un trucco. C'è un modo migliore per evitare questo problema?
Il problema si verifica su Android 2.3.6, non riesco a riprodurlo su Android 4.0.3. Ma data la rarità dei dispositivi 4.x, non è un'opzione per escludere i dispositivi più vecchi.
che il problema mi dava fastidio per giorni .. – mohnage7