2011-03-05 81 views

回答

60

您應該在​​中加載數據並更新您的界面當數據完成加載時。

你甚至可以在你的AsyncTask的onPostExecute()方法中開始一個新的活動。

更具體地說,您將需要擴展的AsyncTask一個新的類:

public class MyTask extends AsyncTask<Void, Void, Void> { 
    public MyTask(ProgressDialog progress) { 
    this.progress = progress; 
    } 

    public void onPreExecute() { 
    progress.show(); 
    } 

    public void doInBackground(Void... unused) { 
    ... do your loading here ... 
    } 

    public void onPostExecute(Void unused) { 
    progress.dismiss(); 
    } 
} 

然後在你的活動,你會怎麼做:

ProgressDialog progress = new ProgressDialog(this); 
progress.setMessage("Loading..."); 
new MyTask(progress).execute(); 
+0

非常感謝:)你的回答工作。 – Neha 2011-03-07 13:15:26

+0

嘿謝謝你的回答,我正在做這件事,但出於某種原因,手機處於橫向時會彈出progressDialog,而不是縱向時。你有什麼想法嗎? 我試過從第一個類(調用myTask的那個)開始對話,但仍然是同樣的問題。 有時,對話框以縱向模式工作,但看起來不合焦,並且這種情況在10次嘗試中只發生一次。 – Art 2013-04-21 04:59:36

2

當你在Android上開始一個長時間運行的進程時,總是建議在另一個線程上執行它。然後,您可以使用UI線程顯示進度對話框。您不能在運行進程的相同(UI)線程中顯示進度對話框。

執行以下步驟來開始你的過程

pd = ProgressDialog.show(this, "Synchronizing data", "Please wait..."); 
Thread t = new Thread(this); 
t.start(); 

對於這個您的活動應該實現Runnable如下

public class SyncDataActivity extends Activity implements Runnable 

最後一個方法來執行長時間運行的過程

@Override 
public void run() { 
     //your code here 
} 
+0

如果你使用線程,你必須管理各種東西,比如在UI線程上執行post-task代碼。 – 2011-03-05 06:50:01

+0

Matthew ...你可以在AsyncTask中將Dmonmon設置爲true嗎? – JAL 2011-03-05 06:57:03

+0

嗨,我嘗試了你們所說的,但它仍然不起作用。我在下面發佈我的代碼。任何人都可以告訴我,我做錯了什麼? – Neha 2011-03-05 07:32:01

相關問題