編輯:關於Android編程
問題
onClick事件是Android開發中最常見的事件。比如,一個submitButton,功能是點擊之後會提交一個訂單,
則一般代碼如下,其中submitOrder()函數會跳轉到下一頁進行處理 :
//代碼0 submitButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { submitOrder(); } });
正常情況下這段代碼是沒什麼問題的,但是Android設備的機型性能等千差萬別,如果碰到比較卡的手機,則有可能出現submitOrder()函數跳轉頁面出現延遲的現象。碰到這種現象,則用戶就很有可能再次點擊一次,從而造成函數被調用兩次,出現重復訂單的BUG。
一般地,碰到這現象,首先就會想到的就是在點擊之後把submitButton設置為不可點擊:
//代碼1 submitButton.setClickable(false); //或者 submitButton.setEnabled(false); </code>
此方法也確實有效,不過如果submitOrder()方法沒有成功,需要再次提交訂單時又需要再重復把submitButton設置為可點擊狀態。如果類似的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,並且實現方法onNoDoubleClick代替onClick即可,像這樣:
<span > //代碼3 submitButton.setOnClickListener(new NoDoubleClickListener() { @Override public void onNoDoubleClick(View v) { submitOrder(); } }); </span>
原理
很簡單,見代碼……
就是用onNoDoubleClick代替onClick處理具體的操作,在onClick方法中加一個判斷:在接收到點擊事件之後,先判斷一下時間,如果距離上次處理操作不足MIN_CLICK_DELAY_TIME,就忽視——即能防止誤操作的連續點擊導致重復事件。
MIN_CLICK_DELAY_TIME可調。
優勢
好處是不用改變原有代碼的邏輯,就只需要兩個替換:NoDoubleClickListener代替OnClickListener,onNoDoubleClick代替onClick。 代碼的結構等都不需要做改變(**對比上面的代碼0跟代碼**3),不需要關心處理更改button的狀態這些額外判斷邏輯,只需要關注業務邏輯即可,簡潔優雅~
本文主要討論有向圖的十字鏈表表示,包括建圖,添加弧,刪除弧,以鄰接表的格式打印圖(其中包括兩種形式:1,同尾的弧構成條鏈 2,同頭的弧構成條鏈)c ++ 描述。類 Arc
懷著無比崇敬的心情翻開了這本書,路漫漫其修遠兮,程序人生,為自己加油!一.序作為這本書的第一章,主席還是把Activity搬上來了,也確實,和Activity打交道的次數
第一篇博客裡面有介紹一篇關於自動換行實現諸多自定義控件跟各種效果的博文,但是礙於當初技術能力有限,寫的jar包裡的代碼亂七八糟,在最近忙完了手頭的工作,不經意間翻看了之前
用戶畫像對程序員來說,用戶畫像就是用戶的屬性和行為;通俗地說,用戶畫像是包括了個人信息、興趣愛好、日常行為等血肉豐滿的客戶實體。用戶畫像是精准營銷的產物,企業通過收集用戶