在AsyncTask中我这样做了:
@Override
protected void onPreExecute()
{
super.onPreExecute();
// initialize the dialog
progressDialog.setTitle("Please wait...");
progressDialog.setMessage("Downloading team data...");
progressDialog.setIndeterminate(true);
progressDialog.setCancelable(true);
progressDialog.show();
}
@Override
protected Boolean doInBackground(String... parms) {
... stuff
@Override protected void onPostExecute(Boolean result) {
progressDialog.dismiss();
}
当我执行上述操作时,在doInBackground作业完成之前我什么也得不到。我读过的笔记说在main中使用get()方法阻止了进度条。
行。在我继续之前,我必须等待任务完成,所以我在没有AsyncTask的情况下写了同样的事情:
公共类LoadTeamData2 {
Context mContext;
String teamName = "";
Boolean result;
String dataload = "";
ProgressDialog progressDialog;
public LoadTeamData2(Context mContext, String team) {
this.mContext = mContext;
teamName = team;
}
public Boolean LoadData () {
ProgressDialog progressDialog = new ProgressDialog(mContext);
progressDialog.setTitle("Please wait...");
progressDialog.setMessage("Downloading team data...");
progressDialog.setIndeterminate(true);
progressDialog.setCancelable(true);
// progressDialog.show();
ProgressDialog.show(mContext, "Title", "Message", true, true);
... more stuff
progressDialog.dismiss();
return true;
}
从上面我得到了progressdialog栏的最简短的闪光。
我甚至从被调用的程序中取出了progressdialog栏,并在对DoStuff的调用的两侧放置了show()和dismiss()方法。仍然没有。
我的智慧结束了。有任何想法吗?谢谢!
答案 0 :(得分:2)
您可以在开始执行ProgressDialog
之前启动AsyncTask
,例如:
gpsProgress = ProgressDialog.show(this, "Searching...", "Getting...", true, true, new DialogInterface.OnCancelListener() {
public void onCancel(DialogInterface dialog) {
}
});
(new SampleAsyncTask(this)).execute(param..);
和onPostExecute(Result)
你可以忽略对话框。
请注意,DialogBox节目不在preExecute()
中,而是在启动AsyncTask
的活动中。
答案 1 :(得分:0)
调用asyncTask.get(XX,XX)阻止UIThread,
我的解决方案是将UIlogic放在onPostExecute()方法中,删除asyncTask.get(XX,XX)