android是怎么根据id查找到控件的

分享到:

============问题描述============


求助。。。。


我有两个xml布局文件,a,b,    两个布局文件中的控件是一样的,id也是一样的。这样eclipse生成的R文件中id也是自由一个的,那么是android怎么根据这个id去查找到指定的控件,而不是查找到另一个????

============解决方案1============


引用 3 楼 u013818990 的回复:
Quote: 引用 2 楼 kifile 的回复:

首先,你在调用 findViewById 之前,你必然是在 activity 中设置了 setContentView, 或者在 Fragment 中重载了 onCreatedView 方法,对于 findViewById, 他只能使用在 view或者 activity 下,对于 view, 你进行遍历的根节点就是对应的 view, 对于 activity, 你对应的根节点就是你使用 setContentView 初始化的布局

当你调用 findViewById 是, android 先对比本身是否具有该 id,是则返回自己,不是则判断自己是否为 ViewGroup, 如果是再对子视图进行遍历,否则返回 null, 遍历时,按照从上到下的顺序一一遍历,只要找到一个节点的 id 为搜索的 id, 则返回这个节点代表的 view, 比如说你的 layout 中有两个相同 id 的 view, 那么返回的必然是最前的那一个


那如果两个id所在的xml布局位于同一层的数(深度相同)那么是返回那一个xml的?或者说它遍历的顺序是先序,后续还是中序?还是说,遍历的顺序是按照viewgroup中xml布局文件的上下顺序?还是实际显示的布局中的上到下,左到右?


先序,因为系统读取的时候始终是按照你的布局文件从上到下读取,那么无论你的布局层级如何,先出现的控件在遍历时总会有限被读取到

============解决方案2============


你可以看看findViewById的源码,里面有比较详细的讲解,它会自动遍历当前所在的View tree来寻找对应的控件。
昵    称:
验证码:

相关文档: