1

当我开始一项新活动时,我的 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();
        }


    }

}  

我正在创建此类 onClick of button 的实例:

ourdepbtn.setOnClickListener(new OnClickListener() {

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

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

有什么建议么?

4

4 回答 4

4
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();  
于 2011-01-25T05:36:16.883 回答
1

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

如果您需要对此进行详细说明。我也会发布的

于 2011-01-25T05:12:10.450 回答
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);
    }
});
于 2011-10-03T08:16:58.480 回答
1

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

你可以在这里阅读更多关于它的信息

于 2011-10-18T16:25:57.390 回答