2016-09-05 7 views
0

私のアプリケーションで、ボタンをクリックするとカウンタが開始され、0(++のように)カウントされ、ユーザーが停止するまで番号を表示するというオプションをアプリケーションで作成したいこれまで私は私がボタンを押したときにAndroid用自動カウントコードの作成方法

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スレッドとも呼ばれます。また、ループの外側からテキストビューを更新していたので、初期値の0が表示されました。 –

関連する問題