2017-01-30 4 views
0

Я создал h.postdelayed, и я хочу отменить это, если условие истинно. Я написал условие if, и внутри него я сделал h.removeCallbacksAndMessages (null). Тем не менее, я вижу, что «таймер» все еще работает. Любая помощь?Обработчик # removeCallbacksAndMessages не работает должным образом

h.postDelayed(new Runnable() { 
    public void run() { 
    timePassed++; 
    timeLeft = (maxTime - timePassed)/10; 
    timeLeftStr = "Time left: " + timeLeft + " seconds"; 
    timer.setText(timeLeftStr); 

    if (timeLeft <= 0) { 
     started = false; 

     h.removeCallbacksAndMessages(null); 

     setupGameOver(restartBtn, header1, header2, timer); 
    } 

    h.postDelayed(this, 100); 
    } 
}, 100); 

ответ

0

Dont postDelayed если вы не хотите, чтобы запустить снова

h.postDelayed(new Runnable() { 
    public void run() { 
     timePassed++; 
     timeLeft = (maxTime - timePassed)/10; 
     timeLeftStr = "Time left: " + timeLeft + " seconds"; 
     timer.setText(timeLeftStr); 

     if (timeLeft <= 0) { 
      started = false; 

      h.removeCallbacksAndMessages(null); 

      setupGameOver(restartBtn, header1, header2, timer); 
     } else { 
      // run again. 
      h.postDelayed(this, 100); 
     } 

    } 
}, 100); 
+0

так же, как: Не removeCallbacksAndMessages если вы не хотите, чтобы снова запустить - вы не имеете любой "до" 'Runnable' так есть ничего не удалить – pskink

+0

да. Я собираюсь предположить, что у @Freeline есть другие runnables looping, которые также нуждаются в остановке, поэтому я оставил метод removeCallbacksAndMessages, как и для того, чтобы это все еще происходило. – petey

+0

aaa ok я вижу вашу точку – pskink

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