2012-09-11 35 views
2

我有一個Activity「A1」和ListActivity「A2」如何在活動結束前的處理過程中在Android活動中顯示加載消息或對話框或圖像?

予取輸入從用戶在Activity「A1」,並根據由用戶給定的輸入I處理並生成結果列表。生成的列表將顯示在我的ListActivity「A2」中。

現在,處理輸入並生成結果列表需要太長時間。所以我想在這個時候顯示一個加載對話框或者加載圖片或者加載消息,這樣用戶就不會認爲這個應用程序被阻塞了。

現在我到目前爲止嘗試過的東西: 是的,我試過AsyncTask! (我知道很多人都會提出這個建議)所以現在我正在做一個AsyncTask的所有處理。我在onPreExecute中顯示ProgressDialog,在doInBackground中執行我的處理並忽略對話框onPostExecute

但是,對話框出現在ListActivity「A2」開始之前。在那之前,Activity「A1」似乎被卡住了!

當我點擊Activity「A1」上的「提交」按鈕並繼續看到ListActivity「A2」出現時,我想讓對話框顯示正確。

請讓我知道你是否需要更多的細節。謝謝。

- 編輯 -

守則的onClick方法:

ProgressDialog progressDialog = new ProgressDialog(this); 
progressDialog.setMessage("Processing... Please Wait..."); 
progressDialog.show(); 
// Execute task 
MyTask myTask = new MyTask(progressDialog); 
AsyncTask<String, Void, ArrayList<HashMap<String, String>>> result = 
    myTask.execute(userChoice); 
Intent intent = new Intent(this, ListActivityA2.class); 
// Put results in intent 
intent.putExtra("results", resultsList); 
// Start result activity 
startActivity(intent); 

的AsyncTask

public class MyTask extends 
      AsyncTask<String, Void, ArrayList<HashMap<String, String>>> { 

     ArrayList<HashMap<String, String>> resultsList = 
        new ArrayList<HashMap<String, String>>(); 
     ProgressDialog progressDialog; 

     public MyTask(ProgressDialog progressDialog) { 
      this.progressDialog = progressDialog; 
     } 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
     } 

     @Override 
     protected ArrayList<HashMap<String, String>> doInBackground(
       String... params) { 
      return doProcess(params[0]); 
     } 

     @Override 
     protected void onPostExecute(ArrayList<HashMap<String, String>> result) { 
      progressDialog.dismiss(); 
      super.onPostExecute(result); 
     } 

     private ArrayList<HashMap<String, String>> doProcess(String choice) { 

      // do processing here 
      return arrayList; 
     } 
} 
+0

我實際上建議你點擊開始進度條;在裏面做你的計算; stasrt Activity2當它解散:) –

回答

1

我已經解決了這個問題!

我感動的代碼來創建IntentonPostExecute

這背後的原因:UI線程(Activity「A1」)是無論如何等待AsyncTask返回結果,以便它可以顯示ListActivity「A2 「

既然創建意圖和啓動ListActivity」A2「發生在onPostExecute UI線程可以不凍結工作。

感謝您的所有幫助@Aswin Kumar!

希望這個問題和答案可以幫助到別人。 :)

0

如果我正確理解你的問題,你はNT上顯示點擊提交,駁回,再展活動A2被填充到數據的對話框

所以,你就可以這樣做:

  1. 在提交

  2. onClick啓動 AsyncTask
  3. 顯示ProgressDialog

  4. 做處理

  5. onPostExecute的數據將被傳遞到A2的被攝體通過Intent與保存的數據保存,關閉對話框,並啓動列表活動A2在Intent

  6. 在活動A2,只是解析數據傳入並顯示列表。

+0

感謝您的答覆。我已經嘗試過了。點擊按鈕時,「Activity」「A1」在那裏凍結(顯示點擊的按鈕),然後在「ListActivity」「A2」加載之前彈出「ProgressDialog」。 –

+0

如果您在運行操作時看到按鈕被凍結,您正在UI線程上進行處理(您不應該這樣做)。粘貼按鈕的'onClick()'和'AsyncTask'實現的代碼,我可以幫你解決。 –

+0

我在問題中添加了代碼。請看看並告訴我我正在做什麼。非常感謝您的幫助! (爲簡單起見,我改變了變量名稱) –

相關問題