查了很多资料,研究了两天showDialog()、onPrepareDialog()和onCreateDialog()的关系,但都没有想明白,今晚看了Android的源代码才终于弄清楚这三者是什么关系......

----> showDialog()调用createDialog()和onPrepareDialog(),其中createDialog()调用onCreateDialog()。
import android.app.Activity;import android.app.Dialog;import android.app.ProgressDialog;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class Sample2_19_Activity extends Activity{    final int PROGRESS_DIALOG = 0;    final int INCREASE = 0;    final int MAX_COUNTER = 100;       ProgressDialog pd;    Handler hd;       @Override    public void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);               Button bok = (Button) this.findViewById(R.id.Button01);        bok.setOnClickListener        (            new OnClickListener()            {                @Override                  public void onClick(View v)                {                    showDialog(PROGRESS_DIALOG);                                   }            }        );                hd = new Handler()        {            @Override            public void handleMessage(Message msg)  //必须重写此方法,用于接收数据            {                super.handleMessage(msg);                               switch(msg.what)                {                   case INCREASE:                     pd.incrementProgressBy(1);//进度每次加1                        if(pd.getProgress() >= MAX_COUNTER)                        {                            pd.dismiss();                                                        }                                         break;                }            }        };    }       @Override    public Dialog onCreateDialog(int id)    {        switch(id)        {              case  PROGRESS_DIALOG:                 pd = new ProgressDialog(this);                 pd.setMax(MAX_COUNTER);//设置最大值                 pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);                  pd.setTitle(R.string.title);//设置标题                 pd.setCancelable(false);//设置进度对话框不能用回退按钮关闭                     Log.d("kkk", "kkk");              break;        }               return pd;    }         @Override    //每次弹出对话框时被回调以动态更新对话框内容的方法    public void onPrepareDialog(int id, Dialog dialog)    {        super.onPrepareDialog(id, dialog);           switch(id)           {          case  PROGRESS_DIALOG:            pd.incrementProgressBy(-pd.getProgress());//对话框进度清零            new Thread()            {                  public void run()                  {                    while(true)                    {                          hd.sendEmptyMessage(INCREASE);                          if(pd.getProgress() >= MAX_COUNTER)                          {                              break;                          }                          try                          {                              Thread.sleep(40);                          }                          catch(Exception e)                          {                              e.printStackTrace();                          }                     }                  }                             }.start();          break;        }    }}      

Android SDK源代码

public final void showDialog(int id) {        showDialog(id, null);}==================================================================================================public final boolean showDialog(int id, Bundle args) {        if (mManagedDialogs == null) {            mManagedDialogs = new SparseArray<ManagedDialog>();        }        ManagedDialog md = mManagedDialogs.get(id);        if (md == null) {            md = new ManagedDialog();            md.mDialog = createDialog(id, null, args);            if (md.mDialog == null) {                return false;            }            mManagedDialogs.put(id, md);        }               md.mArgs = args;        onPrepareDialog(id, md.mDialog, args);        md.mDialog.show();        return true;}================================================================================================== private Dialog createDialog(Integer dialogId, Bundle state, Bundle args) {        final Dialog dialog = onCreateDialog(dialogId, args);        if (dialog == null) {            return null;        }        dialog.dispatchOnCreate(state);        return dialog;}



更多相关文章

  1. Android侧拉框Demo
  2. 五、Fresco——ScaleType focusCrop属性详解
  3. Android中UDP发送报文
  4. Android日常知识收集与总结之EditText篇
  5. Android(安卓)TextView实现下划线的几种方式
  6. Android(安卓)library projects cannot be launched问题的解决
  7. android opengl 渲染的3D色子
  8. Android中文API (60) ―― DatePicker.OnDateChangedListener
  9. 关于Android(安卓)渐变动画 淡入效果的实现

随机推荐

  1. 搭建 android 代码镜像服务
  2. android使用inSampleSize、inScaled、inD
  3. Android关机界面代码
  4. Android(安卓)PinyinIME 源码笔记 -- 0.
  5. Android查看系统信息
  6. android > android 发布各大市场
  7. Android(安卓)筆記-Linux Kernel SMP (Sy
  8. 【contacts】Phonebook电话本
  9. gson使用在android使用例子
  10. 利用Handler来更新android的UI