androi中listview组件之getChildAt()方法的深入了解

最近做andrid项目时使用listView做出gridView的效果显示图片,也许有人会问为什么不直接用gridView呢?诺,有时候gridView是做不出某些效果的,比如iread(读书软件)的书架效果就必须用listview做才能做出那样精致的书架效果,闲话不多说,直接说问题了。因为代码在公司,就不贴源码了,需要的人应该一看就明白。

listView用的是自定义的baseAdapter,然后在baseAdapter里for循环4个线性布局,每个布局中都有三个组件:MyRecyImage(自定义的ImageView),ImageView,TextView(按顺序放在线性布局,不要问我为什么这么做,反正就是遇到这种问题),显示在终端就是一行四个布局,每个布局三个组建如下图:

220309459.png

当convertView==null时就加载四个布局,这个就略过,convertView!=null时就用getChildAt(i)取得缓存中的组建。

以上讲的都是废话,现在进入正题:

因为listView一个Item中有四个布局,共计12个组建,getChildAt(i)时会出现类型转换异常,也就是getChildAt(i)时取缓存组建时混乱了,在网上没找到关于这方面的东西,后几经波折,找到了原因,看下图:

221926469.png

原来getChildAt(1)和getChildAt(4)的值是一样的,所以当把这两个赋给MyRecyImage时就会出现类型转换异常,三个组建的值应该分别为MyRecyImagemi=getChildAt(i%3),ImageViewiv=getChildAt((i+1)%3),TextViewtv=getChildAt((i+2)%3),这样做的话不管一行有多少个布局,多少个组建,都能从缓存中取出实例化的组建,也不会报空指针异常。

问题到这里就解决了,哪里不清楚或不对的还望指正,明天送上代码!

你可能感兴趣的:(androi,深入了解,getChildAt()方法,listview组件)