Skip to content

Latest commit

 

History

History
40 lines (30 loc) · 1.64 KB

viewgroupfindview.md

File metadata and controls

40 lines (30 loc) · 1.64 KB

//返回一个在vg下面的一个View,id为方法的第二个参数

 public static View find(ViewGroup vg, int id){
 
 
 }
 
 可以使用的方法有:
 
 View -> getId() 返回一个int 的 id
 ViewGroup -> getChildCount() 返回一个int的孩子数量
 ViewGroup -> getChildAt(int index) 返回一个孩子,返回值为View。
 
 这个题目就可以说非常经典了,以往的树形结构的题目,我们都是做一个二叉树的处理,除了左就是右,但是这里我们每个ViewGroup都可能有多个孩子,每个孩子既可能是ViewGroup,也可能只是View(ViewGroup是View的子类)
 

 //返回一个在vg下面的一个View,id为方法的第二个参数
 public static View find(ViewGroup vg, int id){
     if(vg == null) return null;
     int size = vg.getChildCount();
     //循环遍历所有孩子
     for(int i = 0 ; i< size ;i++){
         View v = vg.getChildAt(i);
         //如果当前孩子的id相同,那么返回
         if(v.getId == id) return v;
         //如果当前孩子id不同,但是是一个ViewGroup,那么我们递归往下找
         if(v instance of ViewGroup){
             //递归
             View temp = find((ViewGroup)v,id);
             //如果找到了,就返回temp,如果没有找到,继续当前的for循环
             if(temp != null){
                 return temp;
             }
         }
     }
     //到最后还没用找到,代表该ViewGroup vg 并不包含一个有该id的孩子,返回空
     return null;
 }