Android防止過快點擊造成多次事件 一行代碼搞定,特別簡單,可以複用

來源:互聯網
上載者:User

標籤:

onClick事件是Android開發中最常見的事件,正常情況下這段代碼是沒什麼問題的,
但是Android裝置的機型效能等千差萬別,如果碰到比較卡的手機,
則有可能出現submitOrder()函數跳轉頁面出現延遲的現象。碰到這種現象,則使用者就很有可能再次點擊一次,
從而造成函數被調用兩次,出現重複訂單的BUG。


解決方案
方案一:(不建議)
一般地,碰到這現象,首先就會想到的就是在點擊之後把submitButton設定為不可點擊:
此方法也確實有效,不過如果submitOrder()方法沒有成功,需要再次提交訂單時又需要再重複把submitButton設定為可點擊狀態。
如果類似的button比較多時,就顯得比較麻煩、混亂。

方案二
自訂一個NoDoubleClickListener,繼承自OnClickListener:
public abstract class NoDoubleClickListener implements OnClickListener {public static final int MIN_CLICK_DELAY_TIME = 1000;//這裡設定不能超過多長時間private long lastClickTime = 0;protected abstract void onNoDoubleClick(View v);@Overridepublic void onClick(View v) {long currentTime = Calendar.getInstance().getTimeInMillis();if (currentTime - lastClickTime > MIN_CLICK_DELAY_TIME) {lastClickTime = currentTime;onNoDoubleClick(v);} }   }



給submitButton設定點擊事件時用NoDoubleClickListener代替OnClickListener,並且實現方法onNoDoubleClick代替onClick即可,像這樣:

submitButton.setOnClickListener(new NoDoubleClickListener() {            @Override            public void onNoDoubleClick(View v) {                submitOrder();            }        });




原理:
很簡單,見代碼……
就是用onNoDoubleClick代替onClick處理具體的操作,在onClick方法中加一個判斷:在接收到點擊事件之後,
先判斷一下時間,如果距離上次處理操作不足MIN_CLICK_DELAY_TIME,就忽視——即能防止誤操作的連續點擊導致重複事件。
MIN_CLICK_DELAY_TIME可調。


優勢
好處是不用改變原有代碼的邏輯,就只需要兩個替換:NoDoubleClickListener代替OnClickListener,
onNoDoubleClick代替onClick。 代碼的結構等都不需要做改變(**對比上面的代碼0跟代碼**3),
不需要關心處理更改button的狀態這些額外判斷邏輯,只需要關注商務邏輯即可,簡潔優雅~









Android防止過快點擊造成多次事件 一行代碼搞定,特別簡單,可以複用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.