2010-12-01 8 views
14

내 서버를 폴링 할 때 진행 대화 상자를 열려고합니다. 이 클래스는 탭 막대 내에 중첩되어 있으므로 ActivityGroup입니다. 프레임 내에보기를 유지하려면 ActivityGroup이 필요합니다.Android : AsyncTask ProgressDialog가 ActivityGroup에서 열리지 않습니다.

public class CheckInActivity extends ActivityGroup{ 
     ... 
     public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.checkin); 
      new LocationControl().execute(this); 

이제 내 AsyncTask를 클래스는 같은 CheckInActivityClass 내 : I 지정된 응용 프로그램을 실행하면

private class LocationControl extends AsyncTask<Context, Void, Void> 
    { 
     private final ProgressDialog dialog = new ProgressDialog(CheckInActivity.this); 

     protected void onPreExecute() 
     { 
      this.dialog.setMessage("Determining your location..."); 
      this.dialog.show(); 
     } 

그것은 창 관리자 $ BadTokenException에 관한 오류를 스루 여기 내 ActivityGroup 클래스의 선언은 . 그것은 알 수없는 토큰으로 창을 시작할 수 없다는 것을 나타냅니다. 나는 그냥 Activity (ActivityGroup이 아닌) 인 샘플 앱을 만들려고 노력했지만 제대로 작동했다.

누구나 작동하도록이 설정을 수정하거나 진행률 표시 줄을 탭 표시 줄에 중첩시킬 수있는 방법을 알고 있습니까? 어떤 도움이라도 대단히 감사합니다.

답변

22

ActivityGroup이 TabActivity 내에 있으면 둘 이상의 레벨로 활동을 중첩했습니다. Android는 현재이 기능을 지원하지 않지만 해결 방법이 있습니다. 상위 액티비티를 대화 상자에 전달해야합니다. 의 getParent()가 작동하지 않는 경우

private Context getDialogContext() { 
    Context context; 
    if (getParent() != null) context = getParent(); 
    else context = this; 
    return context; 
} 

그런 다음

private final ProgressDialog dialog = new ProgressDialog(getDialogContext()); 
1

에 선

private final ProgressDialog dialog = new ProgressDialog(CheckInActivity.this); 

을 변경

활동 수업이 목적을 위해 도우미 메서드를 만듭니다 대신 TabsActivity.context을 사용해보십시오 (또는 상위 탭 활동 클래스의 이름으로 대체하십시오). 중첩 된 활동을 사용하고 있으므로 getParent()를 사용하여 대화 상자의 오른쪽 컨텍스트를 반환하지 않습니다. 즉, 바로 부모가 아닌 TabsActivity를 확장하는 활동의 컨텍스트가 필요합니다.

간단한 수정 :

  1. 당신은 TabsActivity 클래스의 컨텍스트 변수를 만들어야합니다. onCreate 메소드에서 public static TabsActivity context;context=this과 같은 것입니다.

    AlertDialog.Builder builder = new AlertDialog.Builder(this);

으로 :

  • 는 대화 상자를 만드는이 라인 교체

    AlertDialog.Builder builder = new AlertDialog.Builder(TabsActivity.context); 
    

    을하고 그것이 마치 마법처럼 작동합니다. 여기

  • 3

    간단한 당신은 또한

    private final ProgressDialog dialog = new ProgressDialog(getParent()); 
    

    나를 위해 완벽하게 작동를 사용할 수 있습니다.