Android ListView

     讲解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


       先写这么多吧。等想到其他的再做补充,也欢迎大家指教。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值