最近測試人員測試我們的APP的時候,喜歡快速點擊某個按鈕,出現一個頁面出現多次,測試人員能不能禁止這樣。我自己點擊了幾下,確實存在這個問題,也感覺用戶體驗不太好。於是乎后來我搜了下加一個方法放在我們Utils類里
// 判斷按鈕是否快速點擊 private static long lastClickTime; public synchronized static boolean isFastClick() { long time = System.currentTimeMillis(); if (time - lastClickTime < 500) { return true; } lastClickTime = time; return false; }
這樣我就在onclick()方法里加如下代碼
public void onClick(View v) { if(Utils.isFastClick){ return; } }
加了之后,的確是禁用了某個界面的的重復點擊,於是我就高興地告訴測試人員我解決了這個問題,他看了之后,也說了沒問題了。但是好景不長,他就又在其他頁面發現可以重復點擊,有特么出現多個頁面了,說最后都不要重復點擊。下班的路上我左思右想,還點擊其他的APP,發現都沒有重復點擊事件。第二天早上我起床的時候,突然冒出一個想法,如果我在父類實現onclicklistener方法 重寫onclick方法,然后寫一個禁止重復點擊的方法,那么子類就應該不會出現重復點擊事件了。於是我google了好久,沒有發現一個比較好的例子,在我們組經驗豐富程序員的幫助下,這里也非常感謝他,呵呵,為此我給了他一個蘋果。最終有了以下的代碼。
禁止重復點擊 public void avoidDouleClick(View v) { clickView = v; if (oldId == -1) { lastClickTime = SystemClock.elapsedRealtime(); oldId = v.getId(); return; } else if (v.getId() == oldId) { long time = SystemClock.elapsedRealtime(); if (time - lastClickTime < 500) { v.setId(0); return; } } else if (v.getId() == 0) { lastClickTime = SystemClock.elapsedRealtime(); v.setId(oldId); } }
這個思路其實就是禁止一個button的id連續點擊超過500毫秒,這樣不就避免了重復點擊事件。這樣子Activity重寫onClick()方法,這樣子類就不要再次實現OnClickListener接口了,就能少寫點代碼了。
@Override public void onClick(View v) { super.onClick(v); }
當然,在BaseFragment也要像BaseActivity一樣。這樣就能禁止Actvitity和Fragment的重復點擊事件了。