国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android如何防止多次點擊事件

2020-04-11 11:14:09
字體:
來源:轉載
供稿:網友

問題描述

恐怕大家都會遇到這樣的問題,一個點擊事件多次觸發,導致,同樣的內容提交了多次,或者說彈出多個頁面...

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

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

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

一般地,碰到這現象,首先就會想到的就是在點擊之后把submitButton設置為不可點擊:

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

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

方案

自定義一個NoDoubleClickListener,繼承自OnClickListener:

<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設置點擊事件時用NoDoubleClickListener代替OnClickListener,并且實現方法onNoDoubleClick代替onClick即可,像這樣:

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

原理:

很簡單,見代碼……

就是用onNoDoubleClick代替onClick處理具體的操作,在onClick方法中加一個判斷:在接收到點擊事件之后,先判斷一下時間,如果距離上次處理操作不足MIN_CLICK_DELAY_TIME,就忽視――即能防止誤操作的連續點擊導致重復事件。

MIN_CLICK_DELAY_TIME可調。

優勢

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 夏津县| 望谟县| 静海县| 岑溪市| 弥渡县| 平顶山市| 武陟县| 上栗县| 永福县| 湾仔区| 肇东市| 射阳县| 沈阳市| 油尖旺区| 儋州市| 聊城市| 黄龙县| 慈利县| 天柱县| 三江| 桃源县| 海城市| 宜春市| 玉山县| 汶上县| 繁昌县| 中江县| 专栏| 唐海县| 象山县| 滨州市| 乌拉特后旗| 建宁县| 繁峙县| 沙河市| 九江县| 霞浦县| 柘城县| 申扎县| 饶阳县| 毕节市|