2010-09-20 93 views
1

在我的android應用程序中,我正在使用視頻視圖播放視頻。當視頻正在下載時,我正在顯示一個進度對話框。關閉android中的進度對話框

在流媒體不支持或出現錯誤時,屏幕上會顯示一條錯誤消息。單擊錯誤消息後,進度對話框再次顯示消息並嘗試下載。

,但我想,如果有任何錯誤messgae,一旦用戶點擊確定關閉此對話並返回到視頻播放器

,使用戶可以經過一個或下一個視頻。

private ProgressDialog mProgressDialog; 
Handler myUiHandler = new Handler(); 
     boolean m_prgisShowing = false; 
     private static final int DIALOG_100 = 0; 
     ProgressDialog mDialog2; 

    mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
        public void onPrepared(MediaPlayer mp) { 
         Log.i("Manju", "OnPrepared"); 
         myUiHandler.post(myDilgDismis); 
         mVideoView.start(); 



     protected Dialog onCreateDialog(int id) { 
      switch (id) { 
      case DIALOG_100: { 
       mDialog2 = new ProgressDialog(this); 
       mDialog2.setMessage("buffering..."); 
       mDialog2.setIndeterminate(true); 
       mDialog2.setCancelable(true); 

       return mDialog2; 
      } 
      } 
      return null; 
     } 



     Runnable myDilgShow = new Runnable() { 
      public void run() { 
       show_My_Dialog(); 
      } 
     }; 
     Runnable myDilgDismis = new Runnable() { 
      public void run() { 
       dismiss_My_Dialog(); 
      } 
     }; 

     public void show_My_Dialog() { 
      m_prgisShowing = true; 
      showDialog(DIALOG_100); 
     } 

     public void dismiss_My_Dialog() { 
      if (m_prgisShowing) { 

       try { 
        if (null != mDialog2) { 
         mDialog2.dismiss(); 
        } 
       } catch (Exception e) { 
        e.printStackTrace(); 
        m_prgisShowing = false; 
       } 
      } 
      m_prgisShowing = false; 
     } 

請分享您的寶貴建議。

在此先感謝

回答

1

我假設你使用的AsyncTask的線程,在這種情況下,流媒體或下載。那麼你已經實施了

onProgressUpdate 

函數。在此功能中,您可以更新進度對話框以顯示當前的流式傳輸狀態。要關閉進度對話框,您必須將其可見性設置爲false或從佈局中完全刪除它。在onProgressUpdate中,你需要一個if語句或類似的東西來捕獲錯誤並關閉對話框。

編輯:

的代碼顯示您使用Runnable接口來實現線程,這有利於基本的Java開發。但是android sdk有一個特別針對android開發的解決方案,叫做異步任務。建議使用它。

E.g.您可以將私有類添加到oncreate方法所在的主java文件中。

private class MediaPlayer extends AsyncTask<Params, Progress, Result> { 

} 

a。參數:執行時發送給任務的參數類型。

b。進度:在後臺計算期間發佈的進度單位的類型。

c。結果:背景計算結果的類型。

每個異步任務實現以下方法。一個AsyncTask將經過4個步驟:

a。 onPreExecute() - 調用的UI線程立即

- >前,後臺計算調用開始

- >做一些設置(例如,顯示進度對話框)

doInBackground(Params ...) - 調用在後臺線程

- > onPreExecute後立即調用()

- >執行在後臺線程計算,可以採取很長的時間。

- >使用publishProgress(進展...)觸發UI更新進度

- >進度將被傳遞到onProgressUpdate(進展...)

℃。 onProgressUpdate(進展...) - 上調用UI線程

- >更新進度

d。 onPostExecute(結果) - 上調用UI線程

- >調用後臺計算完成

後 - >結果將從doInBackground傳遞(參數...)

如何開始的AsyncTask ?

new MyTask().execute(param1, param2, param3); 

這是一個小概述。我強烈建議您閱讀文檔。

+0

你好ArtWork我在這裏粘貼我的代碼。請你讓我知道我需要改變的地方嗎? – Remmyabhavan 2010-09-20 05:16:52

+0

我不會推薦以這種方式使用線程或runnable。爲什麼?在這裏閱讀,無痛線程http://android-developers.blogspot.com/2009/05/painless-threading.html。使用AsyncTask – 2010-09-20 06:25:22