按鈕觸發一個只應調用一次的動作。在執行行動前的按鈕被禁用,隱藏在onclick處理程序:Android:防止按鈕(已被禁用)上的多個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設備的稀少性,它不能排除舊設備。
這個問題讓我煩惱了幾天.. – mohnage7