showDialog()、onPrepareDialog()和onCreateDialog()的关系【转】

showDialog()、onPrepareDialog()和onCreateDialog()的关系如下:

----> showDialog()调用createDialog()和onPrepareDialog(),其中createDialog()调用onCreateDialog()。

项目源码:

  1 package com.bn.ex2s;
  2 
  3 import android.app.Activity;
  4 import android.app.Dialog;
  5 import android.app.ProgressDialog;
  6 import android.os.Bundle;
  7 import android.os.Handler;
  8 import android.os.Message;
  9 import android.util.Log;
 10 import android.view.View;
 11 import android.view.View.OnClickListener;
 12 import android.widget.Button;
 13 
 14 public class Sample2_19_Activity extends Activity
 15 {
 16     final int PROGRESS_DIALOG = 0;
 17     final int INCREASE = 0;
 18     final int MAX_COUNTER = 100;
 19    
 20     ProgressDialog pd;
 21     Handler hd;
 22    
 23     @Override
 24     public void onCreate(Bundle savedInstanceState)
 25     {
 26         super.onCreate(savedInstanceState);
 27         setContentView(R.layout.main);
 28        
 29         Button bok = (Button) this.findViewById(R.id.Button01);
 30         bok.setOnClickListener
 31         (
 32             new OnClickListener()
 33             {
 34                 @Override  
 35                 public void onClick(View v)
 36                 {
 37                     showDialog(PROGRESS_DIALOG);                   
 38                 }
 39             }
 40         ); 
 41        
 42         hd = new Handler()
 43         {
 44             @Override
 45             public void handleMessage(Message msg)  //必须重写此方法,用于接收数据
 46             {
 47                 super.handleMessage(msg);               
 48                 switch(msg.what)
 49                 {
 50                    case INCREASE:
 51                      pd.incrementProgressBy(1);//进度每次加1
 52                         if(pd.getProgress() >= MAX_COUNTER)
 53                         {
 54                             pd.dismiss();                                
 55                         }                      
 56                    break;
 57                 }
 58             }
 59         };
 60     }
 61    
 62     @Override
 63     public Dialog onCreateDialog(int id)
 64     {
 65         switch(id)
 66         {
 67               case  PROGRESS_DIALOG:
 68                  pd = new ProgressDialog(this);
 69                  pd.setMax(MAX_COUNTER);//设置最大值
 70                  pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
 71                  pd.setTitle(R.string.title);//设置标题
 72                  pd.setCancelable(false);//设置进度对话框不能用回退按钮关闭    
 73                  Log.d("kkk", "kkk");
 74               break;
 75         }       
 76         return pd;
 77     }  
 78    
 79     @Override
 80     //每次弹出对话框时被回调以动态更新对话框内容的方法
 81     public void onPrepareDialog(int id, Dialog dialog)
 82     {
 83         super.onPrepareDialog(id, dialog);
 84            switch(id)
 85            {
 86           case  PROGRESS_DIALOG:
 87             pd.incrementProgressBy(-pd.getProgress());//对话框进度清零
 88             new Thread()
 89             {
 90                   public void run()
 91                   {
 92                     while(true)
 93                     {
 94                           hd.sendEmptyMessage(INCREASE);
 95                           if(pd.getProgress() >= MAX_COUNTER)
 96                           {
 97                               break;
 98                           }
 99                           try
100                           {
101                               Thread.sleep(40);
102                           }
103                           catch(Exception e)
104                           {
105                               e.printStackTrace();
106                           }
107                      }
108                   }                
109              }.start();
110           break;
111         }
112     }
113 }   

==================================================================================================

Android SDK 源代码:

 1 public final void showDialog(int id) {
 2         showDialog(id, null);
 3 }
 4 
 5 ==================================================================================================
 6 
 7 public final boolean showDialog(int id, Bundle args) {
 8         if (mManagedDialogs == null) {
 9             mManagedDialogs = new SparseArray<ManagedDialog>();
10         }
11         ManagedDialog md = mManagedDialogs.get(id);
12         if (md == null) {
13             md = new ManagedDialog();
14             md.mDialog = createDialog(id, null, args);
15             if (md.mDialog == null) {
16                 return false;
17             }
18             mManagedDialogs.put(id, md);
19         }
20        
21         md.mArgs = args;
22         onPrepareDialog(id, md.mDialog, args);
23         md.mDialog.show();
24         return true;
25 }
26 
27 ==================================================================================================
28 
29  private Dialog createDialog(Integer dialogId, Bundle state, Bundle args) {
30         final Dialog dialog = onCreateDialog(dialogId, args);
31         if (dialog == null) {
32             return null;
33         }
34         dialog.dispatchOnCreate(state);
35         return dialog;
36 }

 

 

posted on 2013-05-02 11:18  林盛  阅读(391)  评论(0)    收藏  举报