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 }
浙公网安备 33010602011771号