• 當前位置:首頁 > IT技術 > 移動平臺 > 正文

    Android防止過快點擊造成多次事件 一行代碼搞定,特別簡單,可以復用
    2021-08-08 00:26:52

    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);
    		@Override
    		public 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的狀態這些額外判斷邏輯,只需要關注業務邏輯即可,簡潔優雅~











    本文摘自 :https://blog.51cto.com/u

    開通會員,享受整站包年服務
    国产呦精品一区二区三区网站|久久www免费人咸|精品无码人妻一区二区|久99久热只有精品国产15|中文字幕亚洲无线码