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 のボタンのインスタンスを作成しています:

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サービスから何らかの処理を行ったり、データに影響を与えたりすると、進行状況ダイアログは表示されません。メインスレッドによって呼び出される進行状況ダイアログの表示関数を作成します。別のスレッドを使用してすべてのフェッチを実行します。フェッチスレッドに参加するスレッドを作成し、Handlerクラスオブジェクトを使用すると、実行したい視覚効果が生成されます。

これをさらに詳しく説明する必要がある場合。私も投稿します

于 2011-01-25T05:12:10.450 に答える
1

探しているのは AsyncTask で、onPreExecute()/onPostExecute() で ProgressDialog を表示/非表示にできます

詳細については、こちらをご覧ください。

于 2011-10-18T16:25:57.390 に答える
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 に答える