在Android開發過程中我們經常會碰到這樣的問題,當用戶點擊一個View啟動一個新的Activity的時候,如果快速地多次點擊就會啟動多個相同的界面。雖然說很少會有用戶這么玩自己的手機,但是一旦出現這樣的情況確實是很不好的體驗。剛好前段時間研究過lanchmode,那我們把要啟動的Acitivity改為singleTop,這樣最上面只能有一個相同的界面,問題應該解決了吧?實驗了一下,只能說基本滿足要求了,但是有一些特殊情況如使用startActivityForResult啟動的時候還是不好用。下面來一勞永逸地解決這個問題吧。
首頁,在項目中我們要創建一個父類Activity,就叫FatherActivity吧,實踐證明,項目中使用這么一個父類真是好處多多啊,在這里就不一一列舉了。然后需要重寫一下父類的dispatchTouchEvent方法,僅僅需要幾行代碼。思想就是每次有按下的事件的時候做一下時間間隔的判斷,如果是快速點擊就直接攔截下來。
點擊(此處)折疊或打開
- @Override
- public boolean dispatchTouchEvent(MotionEvent ev) {
- if (ev.getAction() == MotionEvent.ACTION_DOWN) {
- if (Util.isFastDoubleClick()) {
- return true;
- }
- }
- return super.dispatchTouchEvent(ev);
- }
對於快速點擊的判斷,我們可以自己定義想要的事件間隔,在這里我定義的是一秒鍾:
點擊(此處)折疊或打開
- public static boolean isFastDoubleClick() {
- long time = System.currentTimeMillis();
- long timeD = time - lastClickTime;
- lastClickTime = time;
- return truetimeD <= 1000;
- }
最后只要讓所有的Activity都繼承FatherActivity就可以了。