2012-11-16 1 views
2

두 가지 활동이 있습니다. 인 텐트로 두 번째 활동으로 전환하는 동안 SQLite 등에서 데이터를 가져 오는 어댑터가있는 구성 요소가 많아 3 ~ 4 초가 걸립니다. 따라서 전환하는 동안 진행 대화 상자를 표시하려고합니다.진행률 대화 상자 다른 활동으로 전환하는 동안 멈춤

나는이 목적을 위해 주제를 파고 그 중 많은 시도되었습니다

1) 두 번째 활동에 AsyncTask를 사용. 두 번째 작업으로 전환 할 구성 요소를 클릭하자마자 진행 대화 상자가 표시되지 않습니다. 3-4 초를 기다린 후 진행 대화 상자가 사용자 친화적이지 않은 초보다 적은 시간 동안 나타납니다.

2-) 첫 번째 활동에서 AsyncTask 사용. 해당 구성 요소를 클릭하자마자 진행 휠이 회전하지 않습니다. 진행 대화 상자가 멈 춥니 다.

3-) 두 번째 활동에서 AsyncTask onStart() 메소드 사용. 이것이 첫 번째 방법입니다.

아래 코드는 첫 번째 작업에서 AsyncTask를 사용하여 위의 두 번째 방법을 구현합니다. 여기

public void toVisitRegister(Event event) { //Switching to the second activity 
    new startingThread().execute(); 
    Intent toVisitRegister = new Intent(MainCalendar.this, VisitRegister.class); 
    startActivity(toVisitRegister); 
    finish(); 
} 

그리고

내가 또한 onPostExecute에서 startActivity를 호출하려고 한 AsyncTask를

public class startingThread extends AsyncTask<String, String, String> { 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     startingProgress = new ProgressDialog(MainCalendar.this); 
     startingProgress.setTitle("Visit Register"); 
     startingProgress.setMessage("Initializing..."); 
     startingProgress.show(); 
     } 

    @Override 
    protected String doInBackground(String... params) { 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
     if(MainCalendar.this.startingProgress != null) { 
      MainCalendar.this.startingProgress.dismiss(); 
     } 
    } 
} 

이지만, 그것은 작동하지 않았다. 따라서이 문제에 대한 귀하의 의견과 제안을 기다리고 있습니다. 어떤 도움을 주시면 감사하겠습니다.

감사합니다.

답변

2
I also tried to call startActivity in onPostExecute, 

startingThread AsyncTask에 활동 상황을 전달하고 AsyncTask를의 onPostExecute()에서 시작 활동 코드를 삽입. 여기

@Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
     if(MainCalendar.this.startingProgress != null) { 
      MainCalendar.this.startingProgress.dismiss(); 
      Intent toVisitRegister = new Intent(MainCalendar.this, VisitRegister.class); 
      mContext.startActivity(toVisitRegister); 
      mContext.finish(); 
     } 
    } 

mContext 현재 MainCalendar 활동의 컨텍스트입니다.

+0

전환 할 구성 요소를 클릭하자마자 진행 대화 상자가 1 초도 안 남았습니다. 그런 다음 나는 finish() 아래에 dismiss()를 놓았지만, 이번에는 progress wheel이 회전하지 않았습니다. 또한 mContext에 대한 finish() 메서드가 정의되지 않았습니다. –

+0

mContext를 Activity로 캐스팅하십시오. like,'((Activity) mContext).finish();' – user370305

+0

또한'VisitRegister' 액티비티를 확인하기 위해'onCreate()'또는'onStart()'에 많은 작업이 있습니까? – user370305

1

구현을 보면 AsyncTask가 곧바로 다음 활동으로 이동하기 때문에 작업 할 시간이 없습니다. PostExecute()에서 다음 활동을 호출 해보십시오.

I also tried to call startActivity in onPostExecute, but it didn't work. 

당신이 이런 식으로했다나요 :

public void toVisitRegister(Event event) { //Switching to the second activity 
    new startingThread().execute(); 
} 

public class startingThread extends AsyncTask<String, String, String> { 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     startingProgress = new ProgressDialog(MainCalendar.this); 
     startingProgress.setTitle("Visit Register"); 
     startingProgress.setMessage("Initializing..."); 
     startingProgress.show(); 
     } 

    @Override 
    protected String doInBackground(String... params) { 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     if(MainCalendar.this.startingProgress != null) { 
      MainCalendar.this.startingProgress.dismiss(); 
     } 
    Intent toVisitRegister = new Intent(MainCalendar.this, VisitRegister.class); 
    startActivity(toVisitRegister); 
    finish(); 

    } 
} 
+0

예,하지만 진행 대화 상자가 1 초 미만으로 표시되었고 응용 프로그램이 몇 초 동안 전환되기를 기다렸습니다. –

+0

VisitRegister 활동 onCreate() 메소드에서 무엇을합니까? –

+0

SQLite에서 가져온 엄청난 데이터와 인터페이스를 사용하여 하나의 어댑터로 7 개의 스피너를 채우고 다른 어댑터에서 AutoCompleteTextView를 채 웁니다. 이 구성 요소를 선택할지 여부 제어. 그래서 VisitRegister는 꽤 무거운 활동입니다. –