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

pageTan 2014-10-04 10:04:16
求助。。。。


我有两个xml布局文件,a,b, 两个布局文件中的控件是一样的,id也是一样的。这样eclipse生成的R文件中id也是自由一个的,那么是android怎么根据这个id去查找到指定的控件,而不是查找到另一个????
...全文
635 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wukunqiao 2014-10-05
  • 打赏
  • 举报
回复
view tree
dali_yan 2014-10-05
  • 打赏
  • 举报
回复
你可以看看findViewById的源码,里面有比较详细的讲解,它会自动遍历当前所在的View tree来寻找对应的控件。
Kifile 2014-10-05
  • 打赏
  • 举报
回复
引用 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布局文件的上下顺序?还是实际显示的布局中的上到下,左到右? [/quote] 先序,因为系统读取的时候始终是按照你的布局文件从上到下读取,那么无论你的布局层级如何,先出现的控件在遍历时总会有限被读取到
pageTan 2014-10-05
  • 打赏
  • 举报
回复
引用 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布局文件的上下顺序?还是实际显示的布局中的上到下,左到右?
Kifile 2014-10-05
  • 打赏
  • 举报
回复
首先,你在调用 findViewById 之前,你必然是在 activity 中设置了 setContentView, 或者在 Fragment 中重载了 onCreatedView 方法,对于 findViewById, 他只能使用在 view或者 activity 下,对于 view, 你进行遍历的根节点就是对应的 view, 对于 activity, 你对应的根节点就是你使用 setContentView 初始化的布局 当你调用 findViewById 是, android 先对比本身是否具有该 id,是则返回自己,不是则判断自己是否为 ViewGroup, 如果是再对子视图进行遍历,否则返回 null, 遍历时,按照从上到下的顺序一一遍历,只要找到一个节点的 id 为搜索的 id, 则返回这个节点代表的 view, 比如说你的 layout 中有两个相同 id 的 view, 那么返回的必然是最前的那一个

80,337

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧