2012-04-26 6 views
0

実際、私はテキストビューに分と秒を表示するためのハンドラを持つseprate Timerクラスを設計しました。私はそれをデバッグし、ハンドラはハンドルを補いますが、テキストビューは更新されていないので、これはうまくいきます。 私はTimerクラスのために以下のコードにタグをつけています。ありがとうございます。 テキストビューはハンドラを介して更新されません

public class Timer 
{ 
    private int _interval; 
    public int getInterval() 
    { 
     return _interval; 
    } 
    public void setInterval(int delay) 
    { 
     _interval = delay; 
    } 
    private Handler handler; 
    private Runnable _tickHandler; 
    private Runnable delegate; 
    private boolean ticking; 
    public boolean getIsTicking() 
    { 
     return ticking; 
    } 
    public Timer(int interval) 
    { 
     _interval = interval; 
     handler = new Handler(); 
    } 
    public Timer(int interval, Runnable onTickHandler) 
    { 
     _interval = interval; 
     setOnTickHandler(onTickHandler); 
     handler = new Handler(); 
    } 
    public void start(int interval, Runnable onTickHandler) 
    { 
     if (ticking) return; 
     _interval = interval; 
     setOnTickHandler(onTickHandler); 
     handler.postDelayed(delegate, _interval); 
     ticking = true; 
    } 
    public void start() 
    { 
     if (ticking) return; 
     handler.postDelayed(delegate, _interval); 
     ticking = true; 
    } 
    public void stop() 
    { 
     handler.removeCallbacks(delegate); 
     ticking = false; 
    } 
    public void setOnTickHandler(Runnable onTickHandler) 
    { 
     if (onTickHandler == null)  return; 
     _tickHandler = onTickHandler; 
     delegate = new Runnable() 
     { 
      public void run() 
      { 
       if (_tickHandler == null) return; 
       _tickHandler.run(); 
       handler.postDelayed(delegate, _interval); 
      } 
     } 
     ; 
    } 
} 

以下、私が

handlerまたはrunOnUIThread()に、あなたがしなければならない。この

runOnUIThread(new Runnable(){ 

public void run(){ 

lblDevOnOff.setText(""); 
lblDevOnOff.setText(String.format("%d:%02d", minutes,seconds)); 
} 
}) 

のようなものを、このコードを配置

Timer tmr = new Timer(100,new Runnable() 
{ 
    public void run() 
    { 
     long millis = System.currentTimeMillis() - mStartTime; 
     int seconds = (int) (millis/1000); 
     int minutes = seconds/60; 
     seconds = seconds % 60; 
     lblDevOnOff.setText(""); 
     lblDevOnOff.setText(String.format("%d:%02d", minutes,seconds)); 
    } 
} 
); 
tmr.start(); 

答えて

1

テキストビューを更新するために使用していたコードですUIに関連するものはすべてUIスレッドで実行する必要があるためのみ...

0

うん、これはAndroid Dev Guideからです:

したがって、Androidのシングルスレッドモデルには2つのルールだけであります。

  • は、UIスレッド
  • をふさがないでくださいUIスレッド外からAndroid UIツールキットにアクセスしないでください。
関連する問題