最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android如何防止多次點(diǎn)擊事件

 更新時(shí)間:2015年12月03日 09:05:19   作者:丶貳九  
大家都遇到這樣一個(gè)問題吧,一個(gè)點(diǎn)擊事件多次觸發(fā)導(dǎo)致同樣的內(nèi)容提交了很多次,下面小編給大家?guī)硪黄恼聨椭蠹医鉀Qandroid如何防止多次點(diǎn)擊事件,對android防止多次點(diǎn)擊事件相關(guān)只是感興趣的朋友一起學(xué)習(xí)吧

問題描述

恐怕大家都會遇到這樣的問題,一個(gè)點(diǎn)擊事件多次觸發(fā),導(dǎo)致,同樣的內(nèi)容提交了多次,或者說彈出多個(gè)頁面...

onClick事件是Android開發(fā)中最常見的事件。比如,一個(gè)submitButton,功能是點(diǎn)擊之后會提交一個(gè)訂單,則一般代碼如下,其中submitOrder()函數(shù)會跳轉(zhuǎn)到下一頁進(jìn)行處理 :

<code class="hljs" java="">  //代碼0
  submitButton.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
    submitOrder();
   }
  }); </code>

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

一般地,碰到這現(xiàn)象,首先就會想到的就是在點(diǎn)擊之后把submitButton設(shè)置為不可點(diǎn)擊:

<code class="hljs" cs="">  //代碼1
  submitButton.setClickable(false);
  //或者 
  submitButton.setEnabled(false); </code>

此方法也確實(shí)有效,不過如果submitOrder()方法沒有成功,需要再次提交訂單時(shí)又需要再重復(fù)把submitButton設(shè)置為可點(diǎn)擊狀態(tài)。如果類似的button比較多時(shí),就顯得比較麻煩、混亂。

方案

自定義一個(gè)NoDoubleClickListener,繼承自O(shè)nClickListener:

<code class="hljs" java="">  //代碼2
  public abstract class NoDoubleClickListener implements OnClickListener {
   public static final int MIN_CLICK_DELAY_TIME = 1000;
   private long lastClickTime = 0;
   @Override
   public void onClick(View v) {
    long currentTime = Calendar.getInstance().getTimeInMillis();
    if (currentTime - lastClickTime > MIN_CLICK_DELAY_TIME) {
     lastClickTime = currentTime;
     onNoDoubleClick(v);
    } 
   } 
  }</code>

使用方法—— 給submitButton設(shè)置點(diǎn)擊事件時(shí)用NoDoubleClickListener代替OnClickListener,并且實(shí)現(xiàn)方法onNoDoubleClick代替onClick即可,像這樣:

<code class="hljs" java="">  //代碼3
  submitButton.setOnClickListener(new NoDoubleClickListener() {
   @Override
   public void onNoDoubleClick(View v) {
    submitOrder();
   }
  }); </code>

原理:

很簡單,見代碼……

就是用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)勢

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

相關(guān)文章

最新評論

故城县| 乐平市| 阿克陶县| 昌黎县| 正安县| 平谷区| 广元市| 乌兰浩特市| 布尔津县| 丽水市| 增城市| 淮阳县| 石首市| 沂水县| 建德市| 金寨县| 伊金霍洛旗| 巫溪县| 大竹县| 来安县| 都安| 石狮市| 长子县| 筠连县| 吉林省| 汶川县| 乾安县| 长海县| 乃东县| 安泽县| 美姑县| 栾城县| 铁岭县| 平顺县| 中西区| 晋州市| 西藏| 共和县| 和顺县| 广灵县| 沾益县|