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

Android防止按鈕過快點擊造成多次事件的解決方法

 更新時間:2016年07月13日 11:44:42   作者:MrZhang_happy  
這篇文章主要介紹了Android防止按鈕過快點擊造成多次事件的解決方法的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下

問題

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

//代碼0 
submitButton.setOnClickListener(new OnClickListener() { 
@Override 
public void onClick(View v) { 
submitOrder(); 
} 
}); 

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

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

//代碼1 
submitButton.setClickable(false); 
//或者 
submitButton.setEnabled(false); </code> 

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

方案

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

//代碼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); 
} 
} 
} 

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

<span style="font-size:14px;"> //代碼3 
submitButton.setOnClickListener(new NoDoubleClickListener() { 
@Override 
public void onNoDoubleClick(View v) { 
submitOrder(); 
} 
}); </span> 

原理

很簡單,見代碼……

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

MIN_CLICK_DELAY_TIME可調。

優(yōu)勢

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

相關文章

  • Android Doze模式下Alarm定時任務實現(xiàn)流程詳解

    Android Doze模式下Alarm定時任務實現(xiàn)流程詳解

    這篇文章主要介紹了Android Doze模式下Alarm定時任務實現(xiàn),Android的定時任務有兩種,一種是JavaAPI提供的Timer類,另一種就是使用Android的Alarm機制
    2022-11-11
  • Android高亮引導控件的實現(xiàn)代碼

    Android高亮引導控件的實現(xiàn)代碼

    這篇文章主要介紹了Android高亮引導控件的實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Android通過Java sdk的方式接入OpenCv的方法

    Android通過Java sdk的方式接入OpenCv的方法

    這篇文章主要介紹了Android通過Java sdk的方式接入OpenCv的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • Android開發(fā)中Widget的生命周期實例分析

    Android開發(fā)中Widget的生命周期實例分析

    這篇文章主要介紹了Android開發(fā)中Widget的生命周期,結合實例形式分析了Android開發(fā)中Widget生命周期所涉及的常用方法與使用技巧,代碼備有詳盡的注釋便于理解,需要的朋友可以參考下
    2016-02-02
  • Android天氣預報app改進版

    Android天氣預報app改進版

    這篇文章主要為大家詳細介紹了改進版的Android天氣預報app,內容更加充實,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • Kotlin?LinearLayout與RelativeLayout布局使用詳解

    Kotlin?LinearLayout與RelativeLayout布局使用詳解

    Kotlin?的基本特性就先寫到這里,我們這個系列的定位是基礎,也就是能用就好,夠用就好,我們不會舉太多的例子,但是這些都是最經常用到的特性。從這節(jié)開始就是Kotlin和android?進行結合,使用Kotlin進行安卓應用的開發(fā)了
    2022-12-12
  • Java4Android開發(fā)教程(一)JDK安裝與配置

    Java4Android開發(fā)教程(一)JDK安裝與配置

    本文是Android開發(fā)系列教程的第一篇,主要為大家?guī)淼氖情_發(fā)環(huán)境的準備工作,JDK安裝與配置圖文教程,非常的詳細,有需要的朋友可以參考下
    2014-10-10
  • Android中AsyncTask詳細介紹

    Android中AsyncTask詳細介紹

    這篇文章主要介紹了Android中AsyncTask詳細介紹,AsyncTask是一個很常用的API,尤其異步處理數(shù)據(jù)并將數(shù)據(jù)應用到視圖的操作場合,需要的朋友可以參考下
    2015-01-01
  • Android實現(xiàn)帶頭像的用戶注冊頁面

    Android實現(xiàn)帶頭像的用戶注冊頁面

    這篇文章主要介紹了Android實現(xiàn)帶頭像的用戶注冊頁面的相關資料,介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • Android 如何實現(xiàn)彈窗順序&優(yōu)先級控制

    Android 如何實現(xiàn)彈窗順序&優(yōu)先級控制

    這篇文章主要介紹了Android 如何實現(xiàn)彈窗順序&優(yōu)先級控制,幫助大家更好的理解和學習使用Android,感興趣的朋友可以了解下
    2021-03-03

最新評論

台前县| 耒阳市| 明溪县| 东乡县| 呼图壁县| 海南省| 津南区| 清苑县| 西华县| 南汇区| 上蔡县| 乐至县| 布拖县| 封丘县| 德阳市| 稷山县| 永胜县| 密山市| 周至县| 乌兰浩特市| 兴隆县| 长兴县| 彭山县| 台前县| 鹤山市| 井陉县| 大同市| 星子县| 隆尧县| 临潭县| 临海市| 独山县| 土默特右旗| 江华| 白玉县| 沾化县| 岑巩县| 湘阴县| 崇礼县| 天台县| 宿州市|