ProgressDialog未显示在活动中

时间:2011-02-01 11:01:44

标签: android progressdialog

我正在尝试在我的应用程序中包含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 个答案:

答案 0 :(得分: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();
    }
};

答案 1 :(得分:0)

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

此外,如果您想在后台执行某些操作并在执行时显示进度对话框,请使用带有ProgressDialog的AsyncTask,如here

答案 2 :(得分: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;
    }

答案 3 :(得分:0)

在Android O中不推荐使用ProgressDialog,现在使用ProgressBar。