13

这似乎是 Android 范围内的问题,您可以在 API 演示中的 Views -> Progress Bar -> Dialogs 中看到。

基本上,如果您显示进度对话框,它会在第一次按预期工作。如果您关闭它并再次显示它(不破坏活动或类似的东西),旋转的图像将停止旋转。在 API Demo 中,您可以通过单击“Show Indeterminate”、按回以关闭对话框并再次单击按钮来看到这一点。

我尝试构建自己的进度对话框,但它显示了同样的问题,因为问题在于“ProgressBar”旋转图像。

我想知道是否有人有解决此问题的方法。

4

5 回答 5

25

如果您关闭 a Dialog,则不得再次显示相同的实例。要么创建一个新的,要么使用hide()而不是dismiss(). 使用时,hide()您仍然需要dismiss()在不再需要时使用它。

于 2010-06-25T17:07:37.107 回答
4

我一直在寻找相同的答案,但是这里没有一个答案对我有用,因为我想使用 Activity 的对话框方法,Activity.showDialog()所以我不必自己管理它们,而且它们会在轮换时自动重新创建。

就像其他一些答案所说的那样,如果在 a 上调​​用 dismiss() ProgressDialog,它将停止旋转。Activity.onCreateDialog()保存对对话框的引用,因此一旦创建它就不会在下次Activity.showDialog()调用时重新创建。它只会调用Activity.onPrepareDialog()并使用它已经拥有的实例。如果它被关闭,那么当它再次显示时它不会旋转。

如果您Activity.removeDialog()使用ProgressDialogid 调用而不是调用 ,则可以强制它重新创建自己Dialog.dismiss()。这将关闭它并删除该引用,因此当Activity.onShowDialog()下次调用时,它将使用Activity.onCreateDialog()而不是仅Activity.onPrepareDialog()创建一个全新的(和旋转的)实例。

确保如果你有一个ProgressDialog可以被解雇或取消的,你设置一个监听器,这样你就可以调用Activity.removeDialog(). 否则只会被驳回。您也可以在调用之前调用它Activity.showDialog()

希望对某人有所帮助。

于 2011-01-25T01:28:32.667 回答
3

您不必使用onCreateDialog对象ProgressDialog,如此处http://developer.android.com/guide/topics/ui/dialogs.html#ProgressDialog所述。您应该在主代码中创建并显示进度对话框,而不是使用showDialogand onCreateDialog

于 2010-06-25T17:46:55.093 回答
1

您可以在 Activity 中声明一个ProgressDialog实例并覆盖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 回答
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 回答