Android 中可以使用 ProgressDialog 對話框,告知使用者目前正在處理,等待處理完畢後才能繼續動作。
使用說明
ProgressDialog 就是會跳出一個告訴你要稍等一下的對話框,期間不能做其他事,必須等待程序執行完畢後才能動作。使用方式很簡單,先建立ProgressDialog物件
ProgressDialog psDialog;
接著在要進入長時間程式碼之前呼叫
psDialog = ProgressDialog.show(this, "訊息", "資料載入中,請稍候...");
在長時間程式碼執行完成後釋放
psDialog.dismiss();
更詳細的資料請看ProgressDialog。
範例程式碼
我在另外一篇文章介紹AsyncTask背景執行的程式碼剛好可以利用,加上 PregressDialog 的完整程式碼如下:public class AsyncTaskDemo extends Activity {
private TextView txtResult;
private ProgressDialog psDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.asynctask);
}
@Override
protected void onStart() {
super.onStart();
txtResult = (TextView) findViewById(R.id.txtTaskResult);
txtResult.setText("Loading......");
psDialog = ProgressDialog.show(this, "訊息", "資料載入中,請稍候...");
new LoadingDataAsyncTask().execute(null);
}
private void getData(){
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private void showData(){
txtResult.setText("資料載入完畢!!");
psDialog.dismiss();
}
class LoadingDataAsyncTask extends AsyncTask<String, Integer, Integer>{
@Override
protected Integer doInBackground(String... param) {
getData();
return null;
}
@Override
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
showData();
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
}
}
劃線部份為這個範例加上去的,其他都和AsyncTask Demo時的一樣。
我將此應用到另一個程式
回覆刪除[Android]解析網頁(html parser)取資料,使用HtmlCleaner
發現執行起來要耗費很多時間
是因為ProgressDialog設定的關係嗎?
Thread.sleep(3000)已經改成30
不是,是 HtmlCleaner 本身就很慢,因為它會去解析整個網頁,所以網頁越大越複雜就會花越多時間,因此我後來也沒有在 Android 上做這件事了。
刪除這裡用 Thread.sleep(3000) 只是為了模擬"有東西在跑,且跑了3秒",在實際使用上並不用加這行。