1

次のような遅延通話があります。

handler.postDelayed(new Runnable() { 
            public void run() {
                newDeviceBluetooth();
            //increment progressbar each thousand millis passed
            }
       },15000);

ただし、完全に機能するプログレスバーがあり、遅延が経過するたびに増加させたいと考えています。では、この問題に対するアプローチは何ですか?これを実装する方法はありますか?

あなたが答えて私を助けるのにかかる時間を感謝します


そのため、回答から何が可能かを調べた後、実行可能を実装する独自のクラスを作成しました。これはこれを実装する可能な方法ですか?私の勘がぐちゃぐちゃになっていないとしたら、ちょっと間違っていると思います。

    public void run() {
    while(counter <= 15){
        if(counter < 15){
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    counter++;
                }
            }, 1000);
        }
        else{
            sb.newDeviceBluetooth();
        }
    }

}
4

2 に答える 2

3

代わりに AsyncTask を使用することは可能ですか? 次に、publishProgress() を呼び出して、onProgressUpdate() で UI を更新できます。

別のスレッドが必要になるため、最善の解決策ではないかもしれません。


しかし、Runnable を毎秒発火させることはできます。run() メソッドに postDelayed() をハンドラーに対して実行させることで、これを行うことができます。

runnable を拡張する独自のクラスを作成し、カウンターにメンバー変数を使用します。通常はUIを更新し、15回目にnewDeviceBluetooth()を呼び出します。

于 2011-06-22T16:24:37.620 に答える
1

問題に対する答えを見つけました。App / dialog/Progressダイアログの下のAPIデモにサンプルコードがあります

したがって、以下のコードを変更する必要がありますが、プログレスバーの遅延が表示されます。

        mProgressHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (mProgress >= MAX_PROGRESS) {
                mProgressDialog.dismiss();
            } else {
                mProgress++;
                mProgressDialog.incrementProgressBy(1);
                mProgressHandler.sendEmptyMessageDelayed(0, 100);
            }
于 2011-06-27T09:59:59.717 に答える