Sunday, August 22, 2010

ProgressDialog提示等待視窗

  哼,只不過是一個小視窗告知使用者︰你必須等待。這麼簡單的小東西我小鰻一下就能搞定!
  結果我一搞就搞了一個下午才搞懂。
  在SDK範例大全中,看到很多的ProgressDialog都有跟著執行緒做視窗的結束,起先我以為ProgressDialog就是要跟著執行緒了,研究到最後,才發現…其實不用。
  仔細看看程式碼,書裡寫的是︰
// 顯示Progress對話方塊
      myDialog = ProgressDialog.show
                 (
                   要顯示視窗的Context,
                   標題的文字,
                   視窗內文,
                   boolean值
                 );
      
      new Thread()
      { 
        public void run()
        { 
          try
          { 
            /* 在這裡寫上要背景執行的程式片段 */
            /* 為了明顯看見效果,以暫停3秒作為示範 */
            sleep(3000);
          }
          catch (Exception e)
          {
            e.printStackTrace();
          }
          finally
          {
            myDialog.dismiss();    // 卸載所建立的myDialog物件
          }
        }
      }.start(); //開始執行執行緒
ok,很清楚的知道,書裡在ProgressDialog的實作下,跟了一個Thread,好讓程式能夠在3秒以內完成並結束。

  但是,Thread這一段就算不寫也沒關係,反正只要用任何方法,讓
myDialog.dismiss();
能夠被執行到,視窗自然就會消失,畫面返回主程式了。

  小鰻真正在實作時,除了摸索Thread倒底要不要寫這個問題以外,還搞了一個小烏龍。
  ProgressDialog本身是能夠接受New出實體的,於是,我在
myDialog = ProgressDialog.show
                 (
                   要顯示視窗的Context,
                   標題的文字,
                   視窗內文,
                   boolean值
                 );
的上面,又加上一段
myDialog = new ProgressDialog(this);
也難怪我在執行myDialog.dismiss()時,怎麼樣也關不掉視窗!

2 comments: