2011-01-24 5 views
0

여러 활동이있는 탭 그룹이 있습니다. 탭 중 하나에서 내가 진행 대화 상자를 배치 할 사람 사이에 두 가지 활동이 있습니다.이 Asynk 작업을 사용하고 있습니다.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(); 
     } 
    } 
} 

내 AboutUs 활동이 클래스를 호출 오전 : 다음은 내가 AboutUs 활동에 대한 내부 클래스를 만든 내 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

먼저 비동기식 GUI 스레드 (Async doInBackground())에서 활동을 시작할 수 없습니다. Button.onClick()에서 직접 시작하십시오 (onTouch를 사용하는 이유는 무엇입니까?) 리스너.

가능한 한 빨리 새 활동에 대한 ProgressDialog를 표시하려면 ProgressDialog가 새 (자식) 활동에 연결되어 있으므로 새 (하위) 활동 onCreate()에서 활동을 생성해야합니다 그렇지?). 레이아웃을 만드는 순서에주의하십시오. setContentView()를 호출 한 후 ProgressDialog 을 만듭니다. ProgressDialog를 왜 보여주고 싶은지 잘 모르겠습니다. childActivity의 표시를 지연시키는 무언가가 있습니까? 일부 데이터를로드 중입니까? 그런 다음 대화 상자가 해당 로딩 작업과 관련되어야합니다 (Async I think).

+0

제안 올리버에 대한

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); } } 

감사합니다 :). 그러나 당신은 생각하지 않는다. 진도 대화는 AboutUs 활동에서 만들어 져야한다. 진행 상황 대화 상자가 자식 활동에서 만들어지고 setContentView() 이후에도 진행되면 대화 상자가 배치 된 후에 표시되므로 백그라운드에서 대화 상자를 표시하는 목적을 무효화 할 수 있습니다. – Nitish

+0

당신은 2 가지 옵션이 있습니다 : 1) 데이터를로드하고 새로운 활동에 진행 상황을 보여주고, 2) 데이터를로드하고 OLD 활동의 진행 상황을 보여주고이를 추가 활동으로 전달합니다 (새로운 활동이 직접 액세스 할 수 있음) – Oliver

+0

맞아. 이것은 코드입니다. 그것은 잘 작동합니다 :) – Nitish

1

개인 클래스 TheTask은 AsyncTask를 확장 {내가 웹 서비스에서 오는 일부 데이터를로드하고 내 AboutUs 활동에서

관련 문제