项目中,不论是ListView,还是GridView,自己定义的Adapter,在getView的时候,发现position总是0,从而导致只有第一行的view可以渲染出来。
经测试和查找,发现是android渲染和调用方式导致的。
ListView或者GirdView等都类似,如果高度设置不够,android在渲染的时候会去试探和探测高度,如果高度不够,则会停止渲染后面的position。
此时会有不少奇怪的调用出现。
- 比如后面还会调用getView方法,但每次positon的值都是0
- 本来getCount是5,但嗲用了4次getView
- 本来getCount是5,但抵用了6次getView
解决方法:
- 如果麽有view的嵌套,那么顶层的View是可以设置合适的高度的
- 如果有View嵌套,那么嵌套层的view的高度是动态的,很难确定的。此时直接设置wrap_content不好处理,只好在运行时,设置View的高度
- 其他方法,待补充吧
期待完美的解决方案,简化代码~~
参考一个猜测:
原因在于GridView的item的layout中android:layout_height定义为wrap_content , 绘制item高度时系统并不知道item应该绘制多高,它会先取一条来试探以确定item绘制的具体高度,这样就导致多调用了一次getView方法。在滑动、长按等GridView需要重绘的情况下,getView的调用次数可能会不止多一次。
参考:
http://www.androidlearner.net/multiple-times-getview.html
http://www.eoeandroid.com/thread-280139-1-1.html
-
-
-
*
-
-
-