2012-01-10 41 views
0

我的應用需要檢查用戶是否雙擊。但我不能使用Android OnDoubleClickListener或類似的東西。只是實現它:Android如何爲UI事件編寫簡單的計時器?

我的問題是從「正常」雙擊不同。

我想要的是: 如果用戶雙擊,運行Y活動。 如果用戶只點擊1次點擊,請等待500毫秒,然後運行X活動。 如果用戶點擊2點擊慢,運行X活性

這是我的代碼:

 long now = System.currentTimeMillis(); 
     thisTime = now; 

     if (thisTime - lastTouchTime < WAIT_TIME) { 
      // Double tap 

      this.getContext() 
        .getApplicationContext() 
        .startActivity(
          (new Intent(getContext(), 
            ChangePlaceActivity.class)) 
            .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); 

      // If is double tap, reset to start state. 
      lastTouchTime = -1; 
      return true; 
     } else { 
      // Too slow or first click 
      // If not double tap, save last state for next check 

      lastTouchTime = thisTime; 

      Log.d("Worker thread", "Declare" + System.currentTimeMillis()); 
      Thread t = new Thread() { 
       public void run() 
       { 
        try { 
         sleep(WAIT_TIME); 
        } catch (InterruptedException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
       } 
      }; 
      t.start(); 
      try { 
       t.join(); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      Log.d("Worker thread", "" + System.currentTimeMillis()); 

      // start MainAct 
      Log.d("Single Click", "Yes"); 
      this.getContext() 
        .getApplicationContext() 
        .startActivity(
          (new Intent(getContext(), 

          MainActivity.class)) 
            .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); 
     } 

如果這樣使用的代碼,我無法把雙擊。如果刪除thread.run()thread.join()。它將在ChangePlacecActivity之前啓動MainActivity。

有沒有解決這個問題的方法? 提前謝謝!

對不起,我的英語不好。

+2

爲什麼不在第一次敲擊後啓動計時器?如果您在定時器啓動之前已經跟蹤了一次水龍頭並獲得了另一個水龍頭,請運行雙擊代碼。如果定時器首先啓動,請運行您的X代碼。這是事件驅動UI工作的方式。請永遠不要調用睡眠,特別是在UI線程中。 – 2012-01-10 04:42:27

+0

@Jason Coco:我知道不應該阻止UI線程。計時器是我需要但不知道如何。請給出答案。謝謝! – HVNSweeting 2012-01-10 04:48:04

+1

我不知道如何在Android中編寫計時器。我建議你編輯你的問題並命名爲「我如何爲UI事件編寫一個簡單的計時器?」。您可以保留問題的其餘部分,並留下這些評論。我相信你會得到答案。 – 2012-01-10 04:53:21

回答

1

您可以使用Handler。喜歡的東西:

(類級別的聲明)

Handler handler = new Handler(); 
Runnable singleClickTask = new Runnable() { 
    public void run() { 
    //run X activity 
    firstClick = true; 
    } 
}; 
boolean firstClick = true; 

(然後在的onClick)

if (firstClick) { 
    handler.postDelayed(singleClickTask, 500); 
    firstClick=false; 
} else { 
    handler.removeCallbacks(singleClickTask); 
    firstClick=true; 
    //run Y activity 
} 

請盲目使用它之前,這個自己調試,但我認爲這是正確的。

+0

謝謝,我試過handler.postDelayed()但我不知道handler.removeCallbacks(); – HVNSweeting 2012-01-10 06:30:40