您的位置:首页 > 移动开发 > Android开发

findViewById源码解析

2016-06-21 09:08 525 查看
一直都在用findViewById来初始化view,但不知道里面具体的实现,先看下findViewById源码。

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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  源码 android