亚洲精品亚洲人成在线观看麻豆,在线欧美视频一区,亚洲国产精品一区二区动图,色综合久久丁香婷婷

              當(dāng)前位置:首頁(yè) > IT技術(shù) > 移動(dòng)平臺(tái) > 正文

              Android防止過(guò)快點(diǎn)擊造成多次事件 一行代碼搞定,特別簡(jiǎn)單,可以復(fù)用
              2021-08-08 00:26:52

              onClick事件是Android開(kāi)發(fā)中最常見(jiàn)的事件,正常情況下這段代碼是沒(méi)什么問(wèn)題的,
              但是Android設(shè)備的機(jī)型性能等千差萬(wàn)別,如果碰到比較卡的手機(jī),
              則有可能出現(xiàn)submitOrder()函數(shù)跳轉(zhuǎn)頁(yè)面出現(xiàn)延遲的現(xiàn)象。碰到這種現(xiàn)象,則用戶就很有可能再次點(diǎn)擊一次,
              從而造成函數(shù)被調(diào)用兩次,出現(xiàn)重復(fù)訂單的BUG。


              解決方法
              方案一:(不建議)
              一般地,碰到這現(xiàn)象,首先就會(huì)想到的就是在點(diǎn)擊之后把submitButton設(shè)置為不可點(diǎn)擊:
              此方法也確實(shí)有效,不過(guò)如果submitOrder()方法沒(méi)有成功,需要再次提交訂單時(shí)又需要再重復(fù)把submitButton設(shè)置為可點(diǎn)擊狀態(tài)。
              如果類(lèi)似的button比較多時(shí),就顯得比較麻煩、混亂。

              方案二
              自定義一個(gè)NoDoubleClickListener,繼承自O(shè)nClickListener:
              public abstract class NoDoubleClickListener implements OnClickListener {
              
              
              		public static final int MIN_CLICK_DELAY_TIME = 1000;//這里設(shè)置不能超過(guò)多長(zhǎng)時(shí)間
              		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設(shè)置點(diǎn)擊事件時(shí)用NoDoubleClickListener代替OnClickListener,并且實(shí)現(xiàn)方法onNoDoubleClick代替onClick即可,像這樣:

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




              原理:
              很簡(jiǎn)單,見(jiàn)代碼……
              就是用onNoDoubleClick代替onClick處理具體的操作,在onClick方法中加一個(gè)判斷:在接收到點(diǎn)擊事件之后,
              先判斷一下時(shí)間,如果距離上次處理操作不足MIN_CLICK_DELAY_TIME,就忽視——即能防止誤操作的連續(xù)點(diǎn)擊導(dǎo)致重復(fù)事件。
              MIN_CLICK_DELAY_TIME可調(diào)。


              優(yōu)勢(shì)
              好處是不用改變?cè)写a的邏輯,就只需要兩個(gè)替換:NoDoubleClickListener代替OnClickListener,
              onNoDoubleClick代替onClick。 代碼的結(jié)構(gòu)等都不需要做改變(**對(duì)比上面的代碼0跟代碼**3),
              不需要關(guān)心處理更改button的狀態(tài)這些額外判斷邏輯,只需要關(guān)注業(yè)務(wù)邏輯即可,簡(jiǎn)潔優(yōu)雅~











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

              開(kāi)通會(huì)員,享受整站包年服務(wù)立即開(kāi)通 >