进度对话框不会立即显示

时间:2011-01-25 04:51:10

标签: android progressdialog

当我开始新活动时,我的progressDialog不会立即出现。我正在使用AsyncTask。我正在下一个活动中从Web服务加载数据。以下是我的异步类:

private class TheTask extends AsyncTask<Void, Void, Void>{

    Context con;
     Intent aboutusIntent;
     TabGroupActivity parentActivity;
    private TheTask(Context context)
    {
        this.con=context;
    }

    @Override
    protected void onPreExecute() {
        progDialog = ProgressDialog.show(con, "Loading... ",
                "please wait....", true);

    }

    @Override
    protected Void doInBackground(Void... params) {
         aboutusIntent = new Intent(con, Departments.class);
          parentActivity = (TabGroupActivity)getParent();
        //progDialog.show();
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {

        parentActivity.startChildActivity("Departments", aboutusIntent);
        if(progDialog.isShowing())
        {
        progDialog.dismiss();
        }


    }

}  

我正在点击按钮创建此类的实例:

ourdepbtn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            new TheTask(AboutUs.this.getParent()).execute();
        }
    });  

有什么建议吗?

4 个答案:

答案 0 :(得分:3)

Handler mHandler = new Handler();// This statement is to be called by the main thread  

ProgressDialog.show();// This statement is to be called by the main thread  

Thread t = new Thread(  
new Runnable(){  

public void run()  
{  

  callWebServicesHereAndFetchingMethod(); //  

   mHandler.post(new Runnable(){  

   public void run()  
   {  
     ProgressDialog.dismiss();  
   }   
});  
    }});  
t.start();  

答案 1 :(得分:1)

您的代码需要多线程....所有视觉效果都由您的主线程控制。如果您使用主线程进行任何处理或从Web服务中说出数据,则不会出现进度对话框。 进行主线程调用的进度对话框显示功能。使用另一个线程进行所有获取。创建一个将加入你的提取线程的线程,并使用Handler类对象产生你想要做的任何视觉效果

如果您需要对此进行详细阐述。我也会发布这个

答案 2 :(得分:1)

用户界面(UI)不是线程安全的,必须从主线程(也称为“UI线程”)调用UI。

Handler handler = new Handler(); // Create on main thread.

// ...

handler.post(new Runnable() {
  @Override
  public void run() {
    ProgressDialog dialog = ProgressDialog.show(this, "",
       "Loading. Please wait...", true);
    }
});

答案 3 :(得分:1)

您正在寻找的是AsyncTask,您可以在其中显示/隐藏onPreExecute()/ onPostExecute()

中的ProgressDialog

您可以阅读更多相关信息here