我正在尝试在我的应用程序中包含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;
}
}
有谁知道为什么对话框没有出现?有线索吗?
答案 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。