2016-10-17 5 views
0

내 프로그램에 두 개의 CountDownTimer가 있습니다. 4 초 1 초, 24 초입니다. 짧은 타이머가 실행될 때마다 4 초마다 더 긴 타이머를 일시 중지하고 싶습니다. 그런 다음 짧은 타이머가 끝나면 긴 타이머가 카운트 다운을 시작합니다. 여기에 2 개 개의 타이머에 대한 코드는 다음과 같습니다다른 카운트 다운 타이머가 실행 중일 때 어떻게 카운트 다운 타이머를 일시 중지 할 수 있습니까?

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(); 

내가 그 짧은 타이머에 대한 onTick에 name.pause()를 가하고, 더 이상 타이머를 이름에 대해 생각했다. 문제는 긴 타이머가 짧은 타이머 뒤에 쓰여지기 때문에 이름이 초기화되기 전에 인식 할 수 없다는 것입니다. 자바는 순서대로 읽습니다. 아니면 모든 언어입니까?

누군가 나를 도와 줄 수 있다면 감사 할 것입니다.

아무도 대답 할 수없는 부수적 인 질문으로, 사용자가 EditText (int를위한 것임)에서 아무 것도 입력하지 않을 때 앱이 충돌하는 것을 방지 할 수있는 방법이 있습니까? 마찬가지로 앱을 강제 종료하지 않고 계속 사용할 수 있습니까?

미리 감사드립니다.

+0

당신이를 확장하는 클래스를 만들어야합니다

public void timerStart(long timeLengthMilli) { timer = new CountDownTimer(timeLengthMilli, 1000) { @Override public void onTick(long milliTillFinish) { milliLeft=milliTillFinish; } 

타이머 일시 정지하려면 :

타이머를 시작하려면 카운트 다운 타이머. 그렇다면 당신의 짧은 하나 안에 접근 할 수 있습니다 ...... – Opiatefuchs

답변

0

코드에서 24 초 타이머를 시작/일시 중지/다시 시작하는 별도의 메서드를 만듭니다. 24 초 타이머의 milliTillFinished를 저장해야 타이머를 다시 시작하는 방법을 전달할 수 있습니다. 4 초 타이머 onTick() 메서드에서 24 초 타이머를 일시 중지하고 onFinish() 메서드에서 다시 시작할 수 있습니다. 타이머

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

다시 시작하려면 :

대신`새로운 CountDownTimer`의
private void timerResume() { 
    timerStart(milliLeft); 
} 
+0

희망이 도움이 될 것입니다 :) –

+0

내 게시물에 나는 분명히 내가 일시 중지하거나 4 초에 24 초 타이머를 시작할 수 없다고 말했다. 다음 번에 자세히 읽으십시오. – User44

관련 문제