findViewById源码解析

来源:互联网 发布:js正则判断是否是数字 编辑:程序博客网 时间:2024/06/09 21:51

一直都在用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。

0 0
原创粉丝点击