ボタンは、一度だけ呼び出す必要があるアクションをトリガーします。アクションが実行される前に、onClick ハンドラーでボタンが無効になり、非表示になります。
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)
}
ボタンはすぐに無効になりますが、非常にすばやく複数回タップすることで、複数の「onClick」イベントをトリガーすることができます。(つまりperformTaskOnce
、複数回呼び出されます)。ボタンが実際に無効になる前に、onClickイベントがキューに入れられているようです。
対応するボタンが既に無効になっているかどうかをすべての onClick ハンドルでチェックすることで問題を解決できましたが、それはハックのようです。この問題を回避するより良い方法はありますか?
問題は Android 2.3.6 で発生し、Android 4.0.3 では再現できません。しかし、4.x デバイスの希少性を考えると、古いデバイスを除外することはできません。