1.view的handler是从哪里来的呢?
handler是从mAttachInfo过来的.
在dispatchAttachedToWindow的时候来传递过来
dispatchAttachedToWindow是在View调用init初始化之后的,handler还没有被初始化,所以就导致handler返回null对象出外,如果不判空就会崩溃了。
整个Activity的View系统共用一个Handler是由ViewRootImpl创建
https://www.jianshu.com/p/f2a0e13b50ab

2  Inflate

//https://www.jianshu.com/p/83438249ae91
//如果root为null,attachToRoot将失去作用,设置任何值都没有意义。
//如果root不为null,attachToRoot设为true,则会给加载的布局文件的指定一个父布局,即root。
//如果root不为null,attachToRoot设为false,则会将布局文件最外层的所有layout属性进行设置,当该view被添加到父view当中时,这些layout属性会自动生效。


//View view = inflater.inflate(R.layout.util_picture_loop_fragment, null);
//这会使外层的layout 无效?

//这会崩掉 the specified child already has a parent , You must call remove View
//attachToRoot =true 它会执行 root.addView(temp, params); 如果外面再执行addView就错了 要先remove掉
//View view = inflater.inflate(R.layout.fragment, container);

//这才是正常的
//当 attachToRoot 为false 它会自动生成一个 LayoutParams 然后设给view
View view = inflater.inflate(R.layout.fragment, container, false);

我目录的结论就是 对于
由于attachToRoot 会执行 addView 到时会报错

fragment最好的写法
View view = inflater.inflate(R.layout.fragment, container, false);
这个无论单用fragment 还是嵌入到其它在布局都不会崩掉 不然就得手动remove
//对于dialog 可以发现 container 是null 这样一来 attachToRoot 这个参数就无意义了

而对于activity 反正也没root
View view = inflater.inflate(R.layout.fragment, null);

而对于view 需要以xml生成的 可以写成
View view = inflater.inflate(R.layout.fragment, container, this);


 

03-09 07:05