2011-01-24 9 views
0

私は、複数のアクティビティを持つタブグループを持っています。私はAsynk Taskを使用しています。私は弊社についての活動でこのクラスを呼び出していますAsynkタスクandroid

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

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

    @Override 
    protected Void doInBackground(Void... params) { 
     final Intent aboutusIntent = new Intent(getParent(), Departments.class); 
     final TabGroupActivity parentActivity = (TabGroupActivity)getParent(); 
     parentActivity.startChildActivity("Departments", aboutusIntent); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 

     if(progDialog.isShowing()) 
     { 
     progDialog.dismiss(); 
     } 
    } 
} 

::私は、弊社についての活動のための内部クラスを作った私のAsynkTaskクラスで、次の

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.aboutus); 
     . 
     . 
     . 
     . 
/* Button for going to Departments */ 
    Button ourdepbtn = (Button) findViewById(R.id.departmentsbutton); 
    ourdepbtn.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      // TODO Auto-generated method stub 
      //ourDepartments(); 
      new TheTask().execute(); 
      return false; 
     } 
    }); 
} 

しかし、これは新しい活動、すなわちを開始does'nt部署。進行状況ダイアログが表示されてから消えますが、アクティビティはロードされません。
提案がありますか?

答えて

1

まず、(非同期doInBackground()である)非GUIスレッドからアクティビティを開始することはできません。 Button.onClick()内で直接開始してください(onTouchを使用する理由は?)リスナーです。

新しいアクティビティのProgressDialogをできるだけ早く表示する場合は、ProgressDialogが新しい(子)アクティビティに接続されているため、新しい(子)アクティビティonCreate()で作成する必要がありますそれは...ですか?)。レイアウトを作成する順序に注意してください(setContentView()を呼び出しての後にProgressDialog を作成してください)。 ProgressDialogを表示する理由がわかりません。 childActivityの表示を遅らせるものはありますか?いくつかのデータをロードしていますか?その後、ダイアログはその読み込みタスクに関連している必要があります(私は推測していません)。

+0

を拡張します。しかし、あなたは思っていません、進捗ダイアログはAboutUsアクティビティで作成する必要があります。子アクティビティで進捗ダイアログが作成され、setContentView()のあとにも進捗ダイアログが作成されている場合は、レイアウトがレイアウトされた後にダイアログが表示されるため、バックグラウンドでダイアログを表示する目的が損なわれる可能性があります。 – Nitish

+0

2つのオプションがあります:1)データを読み込んで新しいアクティビティの進行状況を表示する、2)データをロードしてOLDアクティビティの進捗状況を表示し、インテントに追加する(新しいアクティビティで直接アクセスできる) – Oliver

+0

それは正しい。これがコードです。それはうまく動作:) – Nitish

1

プライベートクラスTheTaskは、私は、Webサービスから来ているいくつかのデータをロードしていますAsyncTask {ご提案オリバーため

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(); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     if(progDialog.isShowing()) 
     { 
     progDialog.dismiss(); 
     } 
     parentActivity.startChildActivity("Departments", aboutusIntent); 

    } 
} 

感謝:)私弊社についてアクティビティで

関連する問題