加载大量UI时显示ProgressDialog

时间:2013-01-06 08:04:13

标签: android android-asynctask progressdialog

我经常使用asynctask,但这次它不起作用! 我的用户界面包含viewpagerfragments。要填充视图,大约需要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);
    }

}

2 个答案:

答案 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();
}