2012-01-10 1 views
0

Мое приложение должно проверить, не пользовательские клики или нет. Но я не могу использовать Android OnDoubleClickListener или что-то подобное. Просто реализует его:Android Как написать простой таймер для событий пользовательского интерфейса?

Моя проблема отличается от «обычного» двойного щелчка.

Что я хочу: Если пользователь дважды кликает, запустите 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(). Он начнет MainActivity перед ChangePlacecActivity.

Есть ли решение проблемы? Спасибо заранее!

Извините за мой плохой английский.

+2

Почему бы вам не запустить таймер после первого нажатия. Если вы уже отслеживаете краны и получаете еще до того, как срабатывает таймер, запустите код двойного нажатия. Если таймер срабатывает первым, запустите свой X-код. Именно так работает пользовательский интерфейс, управляемый событиями. Никогда не призывайте спать, особенно в потоке пользовательского интерфейса. –

+0

@Jason Coco: Я знаю, что не следует блокировать поток пользовательского интерфейса. Таймер - это то, что мне нужно, но не знаю, как это сделать. Пожалуйста, дайте ответ. Благодаря! – HVNSweeting

+1

Я не знаю, как писать таймер в Android. Предлагаю вам изменить свой вопрос и назовите его «Как написать простой таймер для событий пользовательского интерфейса?». Вы можете оставить остальную часть вопроса как есть и оставить эти комментарии. Я уверен, что вы получите ответ. –

ответ

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

Смежные вопросы