2017-11-22 6 views
0

postDelayed(this,1000);을 if 문 안에 넣었을 때 타이머가 작동하지 않는 이유는 무엇입니까? seconds++; 바로 아래에 있습니까? 레이아웃에는 세 개의 버튼 (시작, 중지, 재설정)이 있습니다. 시 = 0왜 Postdelayed가 if 문에서 작동하지 않는 이유

private void runTimer() { 

    final TextView timeView = (TextView) findViewById(R.id.time_view); 
    final Handler handler = new Handler(); 

    handler.post(new Runnable() { 

     @Override 
     public void run() { 
      int hours = seconds/3600; 
      int minutes = (seconds % 3600)/60; 
      int secs = seconds % 60; 

      String time = String.format("%d:%2d:%02d", hours, minutes, secs); 
      timeView.setText(time); 
      if (running) { 
       seconds++; 
      //handler.postDelayed(this, 1000); 
      //doesnt work if i put it here 
      } 
      handler.postDelayed(this, 1000); 
     } 
    }); 

} 
+0

여기에 코드를 입력하십시오. – ADyson

+0

그것은 나에게 그 일을 허용하지 않습니다. 오류가 있습니다. 이유를 모르겠습니다. –

+0

질문에 코드를 추가하는 것이 가능합니다. 모든 코드를 붙여 넣지 마십시오. 문제를 재현하는 데 필요한 부분 만 붙여 넣기하십시오. 질문 편집기 사용에 문제가있는 경우 SO 도움말 페이지에 지침이 있습니다. 오류가 무엇인지 언급하면 ​​아마 도움을 줄 수 있습니다. – ADyson

답변

0

를 눌러 시작 -> 실행 = 사실, 언론 스톱 -> 실행 = 중지를 눌러 reset-> 실행 = 거짓 초 당신은 runTimer() 변수 running가 false로 설정되어 호출합니다. 대부분의 경우 runTimer()으로 전화를 onClickStart() 방법으로 이동해야합니다 (실행을 true로 설정 한 후).
부울 값을 선언 할 때 기본값은 false로 가정합니다.

+0

if 문 밖에서 postdelayed를 붙이면 작동합니다. 왜죠? –

+0

@AllicioBlack'false-'else-else 문 블록 '을 감옥 밖에 두었 기 때문에 예상대로 작동합니다. 코드의 문제는 항상 거짓 인'running' 변수입니다. 전체 코드가 아니기 때문에 완전히 대답 할 수 없습니다. – Enzokie

+0

레이아웃에는 세 개의 버튼 (시작, 중지, 재설정)이 있습니다. Start-> running = true를 누르고, stop-> running = stop을 누름. reset-> running = false seconds = 0 –