先说明一下,前面部分,都是拆解讲的,可能很乱。
后面部分,我会把最主要的方法,一次性说。
下面的,都是看着源码一步一步来的
以下,是showDialog(1);的步骤
第一步:
showDialog(1);
进到源码,属于Activity.class的
第二步:
public final void showDialog(int id) {
//这里不执行代码,直接传到下面
showDialog(id, null);
}
第三步:
id传到这里了,至于Bundle? null的,上面都看出来了
public final boolean showDialog(int id, Bundle args) {
//这里,检测mManagedDialogs是否为空的
//这个mManagedDialogs是成员变量,我下面打出来!
//private SparseArray<ManagedDialog> mManagedDialogs;
if (mManagedDialogs == null) {
//这里,如果没有这个数组,就会去创建!
//第一次嘛,肯定要创建
mManagedDialogs = new SparseArray<ManagedDialog>();
}
//从数组中查询是否有当前id的ManagedDialog对象,取出来。
//我这里有想法!它不是数组吗?如果ID随便取的话,不是很多空位吗?
//到时候我看看SparseArray的源码,这里暂时不讨论
ManagedDialog md = mManagedDialogs.get(id);
//这里,检测是否有这个ID对应的对话框,如果没有,进去!
if (md == null) {
//既然进来了,证明没有,new一个对话框!
//这里说一下,ManagedDialog是Activicy.class里面的成员内部类
// private static class ManagedDialog {
// Dialog mDialog;
// Bundle mArgs;
// }
//继续,这里创建一个成员内部类
md = new ManagedDialog();
//如上代码展示,通过Activity.class的方法创建ManagedDialog这个内部类的成员变量对象,Dialog对话框
//下面,展示一下调用哪个方法进行创建操作!
// 从下面可以知道传进来的是createDialog(id, null, args);
// private Dialog createDialog(Integer dialogId, Bundle state, Bundle args) {
// 方法内部,又调用了另外一个方法