2012-11-16 86 views
2

我有兩個活動。當通過意圖切換到第二個活動時,它需要3-4秒,因爲它有很多組件,適配器從SQLite等獲取數據。因此,我想在切換時顯示進度對話框。進度對話框凍結時切換到另一個活動

我一直在挖掘主題用於此目的,並嘗試了許多人:

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

這裏是的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(); 
     } 
    } 
} 

我也試圖打電話給startActivity在onPostExecute,但沒有奏效。因此,我在等待你對這個問題的意見和建議。任何幫助將不勝感激。

謝謝。

回答

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

只要點擊要切換的組件,進度對話框就會顯示不到一秒鐘。然後,我把dismiss()放在finish()之下,但這次進度輪不旋轉。另外finish()方法對於mContext是未定義的。 –

+0

將mContext轉換爲Activity。像'((Activity)mContext)。完成();' – user370305

+0

同時檢查你的'VisitRegister' Activity是否有任何繁重的工作在'onCreate()'或'onStart()'上完成? – user370305

1

看看你的實現,AsyncTask沒有時間工作,因爲你會馬上跳到下一個Activity。嘗試調用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

是的,我做了,但進度對話框顯示不到一秒鐘,應用程序等待幾秒鐘切換。 –

+0

你在VisitRegister活動中做了什麼onCreate()方法? –

+0

使用從SQLite獲取的大量數據的接口和一個由另一個適配器創建的AutoCompleteTextView,由一個適配器填充七個Spinner。控制這些組件是否被設置選擇。所以VisitRegister是一個相當繁重的活動。 –

相關問題