天天看點

onCreateDialog方法及示例

          一個Dialog一直被建立及作為Activity的一部分顯示的時候,一般情況下,你應該使用回調方法onCreateDialog(int)建立Dialog,當你使用這個方法的時候,Android系統會自動的管理每一個Dialog的狀态,并有效的控制着每個Dialog,同樣的,每個Dialog也會繼承Activity中的某些特性。就像當一個Dialog顯示的時候,按下菜單鍵顯示Activity定義的選項菜單或者使用音量鍵調整音視訊音量的大小,當你想顯示一個Dialog的時候,調用showDialog(int)方法,傳遞的參數是唯一能辨別你想顯示的對話框的整數。

        當一個Dialog第一次被調用的時候,Android系統會調用你應該執行個體化Dialog的Activity的onCreateDialog方法,這個方法會啟動你從showDialog(int)方法裡面傳遞的那個ID參數所定義的Dialog,當你建立成功後,在方法的最後回傳回這個Dialog。

        在Dialog顯示之前,Android也會調用回調函數onPripareDialog(int,Dialog),當你想在這個Dialog每次打開的時候一些屬性得到改變,你可以定義這個方法,這個方法會在每次Dialog打開的時候被調用,onCreateDialog()隻會在Dialog第一次打開的時候被調用,如果你沒有定義onPrepareDialog(),每次傳回的Dialog都是和第一次顯示的Dialog一樣,這個方法需要傳遞一個ID和在onCreateDialog()方法中建立的Dialog。

        當你準備關閉對話框時,你可以通過對這個對話框調用dismiss()來消除它。如果需要,你還可以從這個Activity中調用dismissDialog(int id) 方法,這實際上将為你對這個對話框調用dismiss() 方法。 如果你想使用onCreateDialog(int id) 方法來管理你對話框的狀态(就如同在前面的章節讨論的那樣),然後每次你的對話框消除的時候,這個對話框對象的狀态将由該Activity保留。如果你決定不再需要這個對象或者清除該狀态是重要的,那麼你應該調用removeDialog(int id)。這将删除任何内部對象引用而且如果這個對話框正在顯示,它将被消除。

        最好的定義onCreateDialog()和onPrepareDialog()中使用switch對傳入的id進行下判斷,每一個case對應着要啟動的Dialog的ID,像下面這個例子一樣:

protected Dialog onCreateDialog(int id)
    {
        switch(id)
        {
            case 1:
            {
                ProgressDialog checkUpdateIng = new ProgressDialog(CallPlayer.this);
                checkUpdateIng.setTitle("正在下載下傳");
                checkUpdateIng.setMessage("請稍候...");
                checkUpdateIng.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                return checkUpdateIng;
            }
            case 2:
            {
                Dialog dialog = new AlertDialog.Builder(CallPlayer.this).setTitle("系統更新").setMessage("發現新版本,請更新!") // 設定内容
                .setPositiveButton("确定", // 設定确定按鈕
                        new DialogInterface.OnClickListener()
                        {
                            public void onClick(DialogInterface dialog,int which)
                            {
                                downloadBar = new ProgressDialog(CallPlayer.this);
                                downloadBar.setTitle("正在下載下傳");
                                downloadBar.setMessage("請稍候...");
                                downloadBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                                downloadUpdateFile();
                            }

                        }).setNegativeButton("取消",new DialogInterface.OnClickListener()
                        {
                            public void onClick(DialogInterface dialog, int whichButton)
                            {
                                // 點選"取消"按鈕之後退出程式
                                init();
                                callPlayer();
                            }
                        }).create();// 建立
                return dialog;
            }
            default:
            {
                return null;
            }
        }
    }