13

これは、Views -> Progress Bar -> Dialogs の下の API デモで確認できる Android 全体の問題のようです。

基本的に、進行状況ダイアログを表示すると、最初は期待どおりに機能します。閉じて再度表示すると (アクティビティなどを破壊することなく)、回転中の画像の回転が停止します。API デモでは、[Show Indeterminate] をクリックし、[戻る] を押してダイアログを閉じ、もう一度ボタンをクリックすると、これを確認できます。

独自の進行状況ダイアログを作成しようとしましたが、「ProgressBar」の回転する画像に問題があるため、同じ問題が発生します。

誰かがこの問題の回避策を持っているかどうか疑問に思っています。

4

5 に答える 5

25

を閉じた場合Dialog、同じインスタンスを再度表示してはなりません。新しいものを作成するか、のhide()代わりにを使用してdismiss()ください。使用するときは、不要になったときhide()にそれを使用する必要があります。dismiss()

于 2010-06-25T17:07:37.107 に答える
4

Activity.showDialog()私は同じ答えを探していましたが、アクティビティのダイアログメソッドを自分で管理する必要がなく、ローテーションで自動的に再作成されるようにしたかったため、ここでの答えはどれもうまくいきませんでした。

他の回答のいくつかが言ったように、dismiss() が呼び出されると、ProgressDialog回転が停止します。ダイアログへの参照を保存するため、一度作成されると、次の呼び出しActivity.onCreateDialog()では再作成されません。すでに持っているインスタンスをActivity.showDialog()呼び出して使用するだけです。Activity.onPrepareDialog()閉じられた場合、再度表示されたときに回転しません。

を呼び出す代わりに の ID を使用して呼び出すActivity.removeDialog()と、強制的に再作成することができます。これはそれを却下し、その参照も削除するため、次に が呼び出されると、代わりに使用され、真新しい (回転している) インスタンスが作成されます。ProgressDialogDialog.dismiss()Activity.onShowDialog()Activity.onCreateDialog()Activity.onPrepareDialog()

却下またはキャンセルできる がある場合は、ProgressDialogを呼び出せるようにリスナーを設定してくださいActivity.removeDialog()。それ以外の場合は、却下されるだけです。を呼び出す直前に呼び出すこともできますActivity.showDialog()

それが誰かを助けることを願っています。

于 2011-01-25T01:28:32.667 に答える
3

ここhttp://developer.android.com/guide/topics/ui/dialogs.html#ProgressDialogonCreateDialogで説明されているように、 forProgressDialogオブジェクトを使用する必要はありません。と を使用する代わりに、メイン コードで進行状況ダイアログを作成して表示する必要があります。showDialogonCreateDialog

于 2010-06-25T17:46:55.093 に答える
1

クラスを定義してAsyncTaskを実装できます。そこで、このようにdoinbackground()メソッドでバックグラウンドプロセスを定義します。

 @Override
   protected String doInBackground(String... params) {
   publishProgress(new Integer(1));
   for(int i=0;i<=300;i++){
System.out.println(i);
}
publishProgress(new Integer(1));
for(int i=301;i<=600;i++){
System.out.println(i);
}
 .................
 ....................
 ...........................
 //your background tasks
publishProgress(new Integer(1));
for(int i=601;i<=900;i++){
System.out.println(i);
}
pd.dismiss();//dismiss the progress dialog here...
return null;
}

onProgressUpdate()メソッドを使用して進捗情報を表示することもできます。http://www.androidcookers.co.cc/2011/12/want-to-run-progress-dialog-in-で完全にわかりやすいチュートリアルを確認してください。 android.html

于 2011-12-16T20:05:22.850 に答える
1

ProgressDialogActivity でインスタンスを宣言してオーバーライドすることができますonCreateDialog(int)。次に、あなたに電話をかける代わりに、電話のインスタンスをあなたが呼び出す場所にshowDialog(int)割り当てるだけです。ProgressDialogonCreateDialog(int)dialog.show()

public class Home extends Activity {

ProgressDialog recordingDialog;

//where you want to call the dialog
recordingDialog = (ProgressDialog)onCreateDialog(RECORDING_DIALOG_KEY);


@Override
protected Dialog onCreateDialog(int id) {
    ProgressDialog dialog = new ProgressDialog(this);

    switch (id) {
    case RECORDING_DIALOG_KEY:
        ((ProgressDialog) dialog).setIndeterminate(true);
        dialog.setCancelable(false);
        ((ProgressDialog) dialog)
                .setProgressStyle(ProgressDialog.STYLE_SPINNER);
        dialog.setMessage("Recording...");
        dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Stop",
                dialogStopListener);

        dialog.show();

        break;
    default:
        dialog = null;
    }
    return dialog;
}
}
于 2010-10-17T09:42:02.087 に答える