讲解ListView的文章实在太多了,依照惯例,我还是为大家选取一篇觉得讲的不错的文章,不在此赘述了。链接如下:http://blog.csdn.net/lmj623565791/article/details/38902805 还转这位大哥的吧,大家可以多多看看他的博客,写的很好。
接下来还是总结下平时遇到的问题:
1. ListView的高度问题,设置wrap_content和设置match_parent的区别?
如果listView的高度设置为wrap_content的时候,ListView就需要多次进行onMeasure操作,并且多次调用getView方法,性能不好,而且容易出现问题。而且即便是条数少于1屏,例如我们只有三条数据,而一屏其实可以显示6条,如果listView的高度设置的是wrap_content,那么getView还是至少会被调用6次后,再调用6次。
这种情况下,第一次的6次是onMeasure的使用用于测量一屏能放多少条数据的。后边才是真正的显示。
可以参考以下出现的问题:http://www.cnblogs.com/linjzong/p/3494090.html
所以终上所述:我们设置listView时最好是用match_parent或者设置固定高度。否则可能引起意想不到的问题。
2.ListView的实际条数有多少条?和getCount有什么样的关系?
当getCount小于一屏的时候,条数就是getCount的值。
当getCount大于一屏的时候,条数就是一屏能够显示的数据条数。
3.多种样式ListItem的情况,如何使用?
一定要记住,修改getViewTypeCount和getItemViewType是成对的,不要漏改getViewTypeCount的值。然后在getView方法里做对应的处理即可。
4.Item复用,缓存是怎样的结构?为什么会有上边3中所说的要求?
listView中用于缓存所有item的是封装了一个RecycleBin的缓存器,缓存器中真实的缓存结构是
private ArrayList<View>[] mScrapViews;每一种itemType对应一个ArrayList,,这个ArrayList中存放的就是该种itemType的所有缓存数据。
这部分可以看我之前在有道云中写的一篇总结:http://note.youdao.com/share/?id=a9116bd00605054e916fbd6505a8e3f5&type=note
5. ListView的效率问题?如何提高listView的使用效率?
(1)从数据上来说,数据量大我们肯定是要分页的,最好每次拉取一屏信息数据即可。
(2)为了滑动屏幕不卡顿,我们一般都会提前预加载下一页
(3)当屏幕滚动很快的时候我们可以先不加载item中的图片,待滚动完毕再加载。而且优先加载当前位置的图片
(4)图片缓存,只缓存当前位置上下数个(比如3)item的图片即可
6.ListView和ScrollerView的使用区别?
既然ScrollerView和ListView都有滚动显示视图的功能,那么我们要如何选择呢?
ListView和ScrollerView最大的区别就是item可以复用的问题。如果所显示的内容没有办法复用,则ListView就失去了它的功效了。此时就可以考虑纯粹用ScrollerView。
几个特别属性的用法:http://blog.csdn.net/fancylovejava/article/details/25372063
先写这么多吧。等想到其他的再做补充,也欢迎大家指教。