我经常使用asynctask
,但这次它不起作用!
我的用户界面包含viewpager
和fragments
。要填充视图,大约需要3秒钟。现在我想使用AsyncTask
显示ProgressDialog,直到它完成。但ProgressDialog
没有显示!!!!
任何人都可以告诉我解决方案吗?感谢
onCreate(...){
setContentView(...)
new LoadUI(MyActivity.this).execute();
}
public class LoadUI extends AsyncTask<Void, Void, Void>{
ProgressDialog pd;
Context context;
public LoadUI(Context mContext) {
this.context = mContext;
pd = new ProgressDialog(mContext);
aViewPager = (ViewPager) findViewById(R.id.aPagerDay);
}
@Override
protected void onPreExecute() {
pd.show();
}
@Override
protected Void doInBackground(Void... params) {
//Create ViewPager
//Create pagerAdapter
return null;
}
@Override
protected void onPostExecute(Void result) {
if (pd.isShowing()) {
pd.dismiss();
}
super.onPostExecute(result);
}
}
答案 0 :(得分:0)
您可以尝试两种选择:
使用AsyncTask
的方法get(long timeout, TimeUnit unit)
,就像那样:
task.get(1000, TimeUnit.MILLISECONDS);
这将使您的主线程等待AsyncTask
的结果最多1000毫秒。
或者,您可以在异步任务中显示进度对话框,直到完成为止。见thread。基本上,当异步任务运行时会显示进度对话框,并在完成时隐藏。
您甚至有第三种选择:“如果Thread
足以满足您的需求,您可以使用其join
方法。但是,如果任务需要很长时间,您仍需要显示进度对话框,否则你会得到一个异常,因为主线程处于非活动状态的时间太长了。
答案 1 :(得分:0)
问题是onCreate()
中的GUI尚未就绪。如果我试图在这种状态下显示Dialog
,则不会显示任何内容。解决方案是将dialog
移至活动onStart()
:
@override
onStart(){
new LoadUI(MyActivity.this).execute();
}