2012-01-03 21 views
3

私は最初に時間が経つと自分自身を埋めるプログレスバーを見つけるために多くのGoogleを使ったと言いたいと思います。 スレッドまたはAsynctaskのいずれかを使用して検索したすべての結果Androidの新機能であるため、進捗バーの更新を処理するハンドラーを追加することで、より簡単に達成できると思っていました。AndroidアプリケーションのハンドラでProgressBarのカウントダウン

しかし、自分のやり方をしている人は見つかりませんでした。 Androidのルールに違反している可能性はありますか?たとえば、複数のハンドラを同時に使用できますか?

私のコードは次のようになります。

public void restarttimebar() 
{ 
    stoptimebar(); 
    for(int i=1;i<12;i++) 
    { 
    Message msg = timebarhandler.obtainMessage(0,i,0); 
    timebarhandler.sendMessageDelayed(msg, i*250); 
    } 

}; 

public void stoptimebar() 
{ 
    timebarhandler.removeMessages(0); 
    Message msg = timebarhandler.obtainMessage(0,0,0); 
    timebarhandler.sendMessage(msg); 
}; 

Handler timebarhandler = new Handler() 
{ 
    @Override 
    public void handleMessage(Message msg) 
    { 
     ProgressBar progressbar = (ProgressBar)findViewById(R.id.timebar); 
     if (msg.arg1 == 0) 
     { 
      progressbar.setProgress(0); 
     } 
     if (msg.arg1 > 0) 
     { 
      progressbar.setProgress(msg.arg1*9); 
     } 
    } 
}; 

今1は、(restarttimebarを呼び出すことができます)。プログレスバーを(再)開始します。 0.25秒ごとにインクリメントされて3秒間が経過します。どんな発言も大歓迎!!

編集:また、stoptimebar()も追加されました。プログレスバーを停止するだけです。また、プログレスバーの標準サイズは100です。したがって、私はちょうど12のアップデート時間を9にします。それはほぼ100です;)バーは私のアプリケーションで非常に正確である必要はありません。

+0

備考私は実際のデバイス(LG 2倍速)とEclipseのエミュレータでそれをテストし、正常に動作します。それから私はそれをこのままにしておきます:) この種のものをGoogleの人々に役立てることができます。 (7時間前はいくつかの場所で夜だったので、おそらくこの投稿を見たことはありませんでした:P) – schijndelvanjos

答えて

0

私の進捗バーの更新方法は正しいと思われます。だから、グーグルと同じ種類の質問をしている人は:質問のコードを使ってください!

0

あなたが作成したスレッドとAsynctasks(非UIスレッド)は、プログレスバーのようなUIに触れてはいけません。タスクがプログレスバーと通信する必要がある場合は、Asynctaskを使用して、UI関連のアクションがonPostExecute()で実行されていることを確認します。このメソッドは、メインのUIスレッドによって呼び出されます。