0

以下のコードに示すように、進行状況ダイアログを作成しようとしています。しかし、問題は、キャンセルを押してプログレス バー (編集:プログレス バーの表示ボタン) をもう一度クリックすると、期待どおりに動作しないことです。インジケーターの動きが速くなり、完了せずに終了することもあります。

これは、スクリーン ショットの [クリックして表示...] ボタンをクリックしたときに onClick3 を呼び出すコードです。

ProgressDialog progressDialogAdvanced;

public void onClick3(View v ){
    showDialog(1);
    progressDialogAdvanced.setProgress(0);
    t = new Thread(new Runnable() {
        @Override
        public void run() {
            for(int i = 1; i <=10; i++){
                try{
                    Thread.sleep(500);
                    progressDialogAdvanced.incrementProgressBy((int)10);
                }catch(InterruptedException e ){
                    e.printStackTrace();
                }
            }
            progressDialogAdvanced.dismiss();
        }
    });
    t.start();
}

プログレスバーを作成するコードは次のとおりです。

protected Dialog onCreateDialog(int id) {
switch (id) {

case 1:
        progressDialogAdvanced = new ProgressDialog(this);
        progressDialogAdvanced.setIcon(R.drawable.ic_launcher);
        progressDialogAdvanced.setTitle("Downloading...");
        progressDialogAdvanced.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        progressDialogAdvanced.setButton(DialogInterface.BUTTON_POSITIVE,"OK",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        //To change body of implemented methods use File | Settings | File Templates.
                        //progressDialogAdvanced.setProgress(0);
                            Toast.makeText(getBaseContext(),"OkClicked",Toast.LENGTH_SHORT).show();
                        }
                    });
        progressDialogAdvanced.setButton(DialogInterface.BUTTON_NEGATIVE,"Cancel",
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            progressDialogAdvanced.dismiss();
                            Toast.makeText(getBaseContext(),"Cancelled",Toast.LENGTH_SHORT).show();
                        }
                    });
        return progressDialogAdvanced;
  }
}

0 から 100 まで 100% を示すインジケーター

編集:

disconnect() の代わりに cancel() を使用しました。以下に示すようにハンドラーを使用しても、何も修正されません。スレッドが破棄されるまで待つ必要があります。

for(int i = 1; i <=10; i++){
    try{
        Thread.sleep(500);                      
    }catch(InterruptedException e ){
        e.printStackTrace();
}
    progressBarHandler.post(new Runnable() {
       public void run() {
           progressDialogAdvanced.incrementProgressBy(10);
   }
    });
}
progressDialogAdvanced.cancel();
4

1 に答える 1

0

次のように、進行状況の最大サイズを追加する必要があります。

progressBar.setMax(100);

この例を参照してください: http://www.mkyong.com/android/android-progress-bar-example/

于 2013-09-03T22:01:21.717 に答える