findViewById源码解析
2016-06-21 09:08
525 查看
一直都在用findViewById来初始化view,但不知道里面具体的实现,先看下findViewById源码。
最后调用findViewTraversal方法。
可以看出如果id相等就直接返回这个view,因为一般是viewgroup使用findViewById,所以viewgroup应该重写了这个方法。
可以看出viewGroup的id等于要找的id直接返回viewGroup子类,不等于的话就遍历viewGoup包含的view。
public final View findViewById(@IdRes int id) { if (id < 0) { return null; } return findViewTraversal(id); }
最后调用findViewTraversal方法。
protected View findViewTraversal(@IdRes int id) { if (id == mID) { return this; } return null; }
可以看出如果id相等就直接返回这个view,因为一般是viewgroup使用findViewById,所以viewgroup应该重写了这个方法。
protected View findViewTraversal(@IdRes int id) { if (id == mID) { return this; } final View[] where = mChildren; final int len = mChildrenCount; for (int i = 0; i < len; i++) { View v = where[i]; if ((v.mPrivateFlags & PFLAG_IS_ROOT_NAMESPACE) == 0) { v = v.findViewById(id); if (v != null) { return v; } } } return null; }
可以看出viewGroup的id等于要找的id直接返回viewGroup子类,不等于的话就遍历viewGoup包含的view。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories