2016-09-05 4 views
0

버튼을 클릭하면 카운터가 시작되고 (0 ++처럼) 카운트하고 사용자가 멈출 때까지 번호를 표시하는 옵션을 내 응용 프로그램에서 만들고 싶습니다. 지금까지 나는 내가 버튼을 누를 때안드로이드에 대한 자동 계산 코드를 만드는 방법

if (v == btn3) { 
     counter = 0; 

     scoreText.setBackgroundColor(Color.RED); 
     new Thread(new Runnable() { 

      public void run() { 
       while (counter < 1000) { 
        try { 
         Thread.sleep(500); 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 
        counter++; 
       } 

      } 

     }).start(); 
     scoreText.setText(Integer.toString(counter)); 
    } 

는 현재 텍스트 필드는 빨간색으로 변하고 0으로 설정이 아닌 작동 코드를 가지고,하지만 난 내 의견의 setText 방법에서

답변

0

를 카운트 할 수 없습니다 루프 외부입니다. 루프가 끝난 후 텍스트보기를 업데이트 할 수 있습니다. 루프 안쪽 어딘가로 이동하십시오.

+0

사용자의 필요에 따라 작동합니다 : 내가 뭔가를하고있다 – likyy2

0

유용한 기능을 제공하는 CountDownTimer이라는 클래스가 있습니다. 특히 그것은 원하는 간격으로 텍스트 필드를 업데이트 할 수있는 onTick() 메서드를 제공합니다.

무한으로 계산하려면 CountDownTimer를 만들어야합니다. this 질문과 같이 onFinish() 메소드에서 타이머를 다시 시작하면됩니다. 그러나 CountDownTimer를 충분히 길게 설정하면 다시 시작하지 않아도됩니다. 이 같은

뭔가 ...

new CountDownTimer(<REALLY_BIG_NUMBER>, 500) { 

int counter = 0; 

public void onTick(long millisUntilFinished) { 
    scoreText.setText(counter++); 
} 

public void onFinish() { 
    start(); 
} 
}.start(); 
0

이 내가 치명적인 예외를 가지고

if (v == btn3) { 
    counter = 0; 

    scoreText.setBackgroundColor(Color.RED); 
    new Thread(new Runnable() { 

     public void run() { 
      while (counter < 1000) { 
       try { 
        Thread.sleep(500); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
       runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        scoreText.setText(Integer.toString(counter)); 
       } 
       }); 
       counter++; 
      } 

     } 

    }).start(); 
} 
+0

을 시도 스레드-4457은 감사하지만 내 문제가 있었다 – likyy2

+0

모니터링 할 수 없기 때문에 하위 스레드에서 ui를 업데이트하는 것은 금지되어 있습니다. 이것이 메인 스레드가 ui 스레드라고도 불리는 이유입니다. 또한 루프 바깥 쪽에서 textview를 업데이트 했으므로 초기 값인 0이 표시되었습니다. –

관련 문제