ProgressDialog 的使用

ProgressDialog

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時的一樣。
本文網址:http://blog.tonycube.com/2011/08/progressdialog.html
Tony Blog 撰寫,轉載時請註明出處及文章連結,謝謝 😀

2 則留言

  1. 我將此應用到另一個程式
    [Android]解析網頁(html parser)取資料,使用HtmlCleaner
    發現執行起來要耗費很多時間
    是因為ProgressDialog設定的關係嗎?
    Thread.sleep(3000)已經改成30

    回覆刪除
    回覆
    1. 不是,是 HtmlCleaner 本身就很慢,因為它會去解析整個網頁,所以網頁越大越複雜就會花越多時間,因此我後來也沒有在 Android 上做這件事了。

      這裡用 Thread.sleep(3000) 只是為了模擬"有東西在跑,且跑了3秒",在實際使用上並不用加這行。

      刪除

留言小提醒:
1.回覆時間通常在晚上,如果太忙可能要等幾天。
2.請先瀏覽一下其他人的留言,也許有人問過同樣的問題。
3.程式碼請先將它編碼後再貼上。(線上編碼:http://bit.ly/1DL6yog)
4.文字請加上標點符號及斷行,難以閱讀者恕難回覆。
5.感謝您的留言,您的問題也可能幫助到其他有相同問題的人。