Eine Schaltfläche löst eine Aktion aus, die nur einmal aufgerufen werden sollte. Die Taste ist deaktiviert und in dem onClick-Handler versteckt, bevor die Aktion ausgeführt wird:Android: Verhindert mehrere onClick-Ereignisse auf einer Schaltfläche (die deaktiviert wurde)
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)
}
Auch wenn die Taste sofort deaktiviert wird, ist es dennoch möglich ist, mehrere „onClick“ Ereignisse ausgelöst wird, um mehrere Male sehr schnell tippen. (d. h. performTaskOnce
wird mehrfach aufgerufen). Scheint, dass die onClick-Ereignisse in die Warteschlange gestellt werden, bevor die Schaltfläche tatsächlich deaktiviert wird.
Ich könnte das Problem beheben, indem Sie jedes einzelne onClick-Handle einchecken, ob die entsprechende Schaltfläche bereits deaktiviert ist, aber das scheint wie ein Hack. Gibt es einen besseren Weg, dieses Problem zu vermeiden?
Das Problem tritt auf Android 2.3.6 auf, ich kann es auf Android 4.0.3 nicht reproduzieren. Aber angesichts der Seltenheit von 4.x-Geräten ist es keine Option, ältere Geräte auszuschließen.
Dieses Problem war mir für Tage nervig. – mohnage7