1

コードを使用した場合、ダイアログにパーセントが表示されない

    final Handler handler = new Handler() {
    public void handleMessage(Message msg) {
        int total = msg.arg1;
        mProgressDialog.setProgress(total);
        if (total >= 100){
            try {
                mProgressThread.sleep(100);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
            mProgressThread.setState(ProgressThread.STATE_DONE);
        }
    }
};

とスレッドコードで

while ((count = input.read(data)) != -1) {
                total += count;
                Message msg = mHandler.obtainMessage();
                msg.arg1 = total;
                mHandler.sendMessage(msg);
                output.write(data, 0, count);
            }

どうしたの?total++を使用する場合; 代わりに合計+=カウント; スケールは19%に上昇しますが、100%には上昇しません。これは、ファイルがwhileループの100回の反復よりも速くダウンロードされるためです。合計+=カウントを使用する場合; 0と表示されますが、スケールは100%で、ファイルがダウンロードされます。

4

1 に答える 1

1

パーセンテージ情報をハンドラーに渡すのではなく、読み取った文字の合計絶対数を渡すようです。total++; と書くと、読み取りルーチンがデータを受け取る回数を渡し、total +=count; を書き込むときに渡します。完全な読み取りルーチン中に読み取ったすべての文字の合計数を渡します。

パーセンテージを表示する場合は、0 ~ 100 の進行状況を渡す必要があります。これを行うには、合計で何文字を読み取り、total +=count; と書くかを知る必要があります。total/CountOfAllCharactersToRead を渡します。このようにして、%-fraction を進捗ダイアログに適切に割り当てます。

ちょうど別のコメント。読書ルーチンが非常に高速な場合、UI が頻繁に更新されず、プログレス バーが実際に 0 から 100 まで表示されないことがあります。

于 2012-04-17T23:31:08.920 に答える