2

我正在尝试在我的应用程序中包含一个 ProgressDialog。但它没有出现。

这是我使用 ProgressDialog 的代码片段:

public class abcActivity extends Activity {
    public boolean onOptionsItemSelected(MenuItem item) {
        case XYZ:
            ProgressDialog dialog = ProgressDialog.show(abcActivity.this, "", "Please wait for few seconds...", true);
            callSomeFunction();
            dialog.dismiss();
            showToast(getString(R.string.SomeString));
            break;
    }
}

有谁知道为什么对话框没有出现?有什么线索吗?

4

4 回答 4

9

我认为您的代码在某种意义上是错误的,因为您在 UI 线程中执行所有操作。您必须将 callsomefunction() 放入后台线程。

public void runSomething()
{
    showDialog(BACKGROUND_ID);
    Thread t = new Thread(new Runnable() 
    {                   
        public void run() 
        {
            //do something
            handler.post(finishThread);
        }
    });

    t.start();
    // The progress wheel will only show up once all code coming here has been executed
}

还有

protected Dialog onCreateDialog(int id)
{
    if(progressDialog == null) progressDialog = new ProgressDialog(this);
    return progressDialog;
}

@Override
protected void onPrepareDialog(int id, Dialog dialog)
{
    if(id == BACKGROUND_ID) 
    {
        progressDialog.setIndeterminate(true);
        progressDialog.setCancelable(false);
        progressDialog.setMessage("running for long ...");
    }
}

Runnable finishThread = new Runnable()
{       
    public void run() 
    {
//long running
        if(progressDialog != null) progressDialog.dismiss();
    }
};
于 2011-02-01T11:48:26.923 回答
0

确保通过调试或添加日志调用此代码。代码对我来说似乎是正确的。

另外,如果你想在后台执行一些操作并在执行时显示一个进度对话框,请使用带有 ProgressDialog bounded 的 AsyncTask,就像这里一样。

于 2011-02-01T11:05:42.510 回答
0

我认为问题出在您的开关状态,请验证它。

这是在android中显示对话框的另一种方法试试这个。

public static final int DIALOG2_KEY = 1;
public static ProgressDialog dialog1;

showDialog(DIALOG2_KEY); // use it where you want to display dialog 

dialog1.cancel();  // use it to cancel the dialog


@Override
    public Dialog onCreateDialog(int id) {
        if (id == 1) {
            dialog1 = new ProgressDialog(this);
            dialog1.setMessage("Please wait...");
            dialog1.setIndeterminate(true);
            dialog1.setCancelable(true);
        }
        return dialog1;
    }
于 2011-02-01T11:12:56.803 回答
0

ProgressDialog 在 Android O 中已弃用,现在使用 ProgressBar。

于 2017-06-29T10:13:31.157 回答