2

asynctask经常使用但是这次它不起作用!我有一个 UI 包含一个viewpagerfragments. 填充视图大约需要 3 秒。现在我想显示 ProgressDialog 直到它使用AsyncTask. 但是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);
    }

}
4

2 回答 2

0

您可以尝试两种选择:

要么像这样使用AsyncTask's 方法get(long timeout, TimeUnit unit)

task.get(1000, TimeUnit.MILLISECONDS);

这将使您的主线程AsyncTask最多等待 1000 毫秒的结果。

或者,您可以在异步任务中显示一个进度对话框,直到它完成。看到这个线程。基本上,异步任务运行时会显示一个进度对话框,完成后会隐藏。

您甚至还有第三个选项:“如果Thread足以满足您的需求,您可以使用它的join方法。但是,如果任务需要很长时间,您仍然需要显示进度对话框,否则您将因为主要线程长时间处于非活动状态。

于 2013-01-06T08:50:32.703 回答
0

问题是 GUI 没有准备好onCreate()。如果我尝试Dialog在这种状态下显示,则不会显示任何内容。一个解决方案是移动dialog到活动onStart()

@override
onStart(){
   new LoadUI(MyActivity.this).execute();
}
于 2015-02-24T08:15:48.870 回答