当前位置: 代码迷 >> Android >> super.findViewById(),this.findViewByid(),view.findViewByid()感觉有些弄不清了
  详细解决方案

super.findViewById(),this.findViewByid(),view.findViewByid()感觉有些弄不清了

热度:621   发布时间:2016-04-28 01:48:37.0
super.findViewById(),this.findViewByid(),view.findViewByid()感觉有点弄不清了
感觉大部分的时候写代码都是
Button button =(Button)findViewById(R.id.button1);
那默认是什么情况呢?

为什么我看见有的地方会有以上三种写法呢- -。

还有 这个和setContview(R.layout.activity_main)有什么关系吧?

多谢多谢~~~
------解决思路----------------------
findviewbyid是view类下的方法,其他的findviewbyid也都是view的子类通过重写实现的
Activity虽然不是view的子类,但它的findviewbyid实际上是getWindow().findViewById(id);
getWindow会返回一个window对象,而window是view的子类
————————————————————————————————
activity的setContview方法是调用自己的window对象的方法
setContview这个方法根据一个布局资源初始化屏幕内容,将填充视图,这也就是看到的界面。
同时也有该布局资源的view层级结构(一个layout布局里,可能有很多view,许许多多的view形成了层次结构……我的理解)
有了这个view层级结构,就可以通过id获取资源了
————————————————————————————————
super.findViewById()是调用父类的findviewbyid

this.findViewById()是调用本类的findviewbyid,所以要看当前类是什么子类来查看目前的findviewbyid的具体意义
功能意义都类似,通过id获得一个view对象,不存在返回null。
像在activity内使用findViewById,就要先调用过setContview。

view.findViewByid()直接调用这个view对象的findviewbyid
常见的可能是

LayoutInflater inflate = LayoutInflater.from(this);
View view = inflate.inflate(R.layout.main,null);

inflate查询的layout下的资源,这就是从main这个布局资源中获取一个view层级结构
你就可以用view.findViewByid()查看是否有你需要的组件对象了。

某种角度上inflate.inflate和setContview是有些像的,因为都能获得/设置你需要的view层级结构
最主要区别在于setContview是会让布局显示出来
  相关解决方案