2016-10-17 5 views
0

У меня есть два CountDownTimers в моей программе: 4-секундный и 24-секундный. Я хочу, чтобы более длинный таймер был приостановлен на каждые 4 секунды, когда работает более короткий таймер. Затем, когда короткий таймер заканчивается, длительный таймер начинает отсчет. Вот код для двух таймеров:Как я могу приостановить один таймер CountDown, когда работает другой?

final CountDownTimer loop = new CountDownTimer(4000, 1000) { 
       @Override 
       public void onTick(long millisUntilFinished) { 

       } 
       @Override 
       public void onFinish() { 
        number.setVisibility(View.GONE); 
        final TextView prompt = (TextView) findViewById(R.id.prompt); 
        prompt.setVisibility(View.VISIBLE); 
        prompt.setText(" Enter the number"); 
        final EditText input = (EditText) findViewById(R.id.enterAnswer); 
        input.setVisibility(View.VISIBLE); 
        input.setOnKeyListener(new View.OnKeyListener() { 
         @Override 
         public boolean onKey(View v, int keyCode, KeyEvent event) { 
          if (event.getAction() == KeyEvent.ACTION_DOWN) { 
           switch (keyCode) { 
            case KeyEvent.KEYCODE_ENTER: 
             Editable answer = input.getText(); 
             int finalAnswer = Integer.parseInt(String.valueOf(answer)); 
             int finalLoadG1 = Integer.parseInt(String.valueOf(number.getText())); 
             input.setVisibility(View.GONE); 
             prompt.setVisibility(View.GONE); 
             if (finalAnswer == finalLoadG1) { 
              score++; 
             } 

             number.setVisibility(View.VISIBLE); 
             int loadG1 = generateG1.nextInt(1000000)+10000; 
             number.setText(""+loadG1); 
             input.getText().clear(); 

             start(); 

             return true; 
            default: 
           } 
          } 
          return false; 
         } 
        }); 
       } 
       }.start(); 


      new CountDownTimer(24000, 1000) { 
       @Override 
       public void onTick (long millisUntilFinished) { 
       } 
       @Override 
       public void onFinish() { 
        TextView result = (TextView) findViewById(R.id.outcome); 
        result.setText("Score: "+ score); 
        TextView prompt = (TextView) findViewById(R.id.prompt); 
        prompt.setVisibility(View.GONE); 
        final EditText input = (EditText) findViewById(R.id.enterAnswer); 
        input.setVisibility(View.GONE); 
        loop.cancel(); 
        number.setVisibility(View.GONE); 
       } 
      }.start(); 

Я думал об именовании более длительный таймер, затем положить name.pause() в OnTick за короткий таймер. Проблема заключается в том, что, поскольку более длинный таймер записывается после более короткого, это имя не распознается до того, как оно было инициализировано. Java читает все в порядке, не так ли? Или это все языки?

Если бы кто-нибудь мог мне помочь, я был бы благодарен.

В качестве побочного вопроса для любого, кто может ответить, существует ли способ предотвратить сбой приложения при нажатии пользователем на EditText (предназначенном для int), чтобы ничего не отправлять? Например, могу ли я просто продолжить приложение без принудительной остановки?

Большое спасибо заранее.

+0

вместо 'нового CountDownTimer' вы должны сделать класс, который расширяет Таймер обратного отсчета. Тогда он доступен внутри вашего короче ...... – Opiatefuchs

ответ

0

Создайте отдельные методы для запуска/паузы/возобновления 24-секундного таймера в коде. Вам необходимо сохранить свой миллилитр, установленный с 24-секундным таймером, чтобы вы могли передать его методу возобновления таймера. Вы можете приостановить 24-секундный таймер на методе onTick() с 4-секундным таймером и возобновить его по методу onFinish().

Для запуска таймера:

public void timerStart(long timeLengthMilli) { 
    timer = new CountDownTimer(timeLengthMilli, 1000) { 

     @Override 
     public void onTick(long milliTillFinish) { 
      milliLeft=milliTillFinish; 
     } 

Чтобы приостановить таймер:

public void timerPause() { 
    timer.cancel(); 
} 

Для возобновления таймера:

private void timerResume() { 
    timerStart(milliLeft); 
} 
+0

Надеюсь, это поможет :) –

+0

В моем посте я четко заявил, что не могу приостановить или запустить 24-секундный таймер на 4-й. В следующий раз внимательно прочитайте это. – User44