码迷,mamicode.com
首页 > 移动开发 > 详细

Android之ListView性能优化——万能适配器

时间:2016-04-26 09:35:22      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

  如下图,加入现在有一个这样的需求图,你会怎么做?作为一个初学者,之前我都是直接用SimpleAdapter结合一个Item的布局来实现的,感觉这样实现起来很方便(基本上一行代码就可以实现),而且也没有觉得有什么不好的。直到最近在慕课网上看到鸿洋大神讲的“机器人小慕”和“万能适配器”两节课,才对BaseAdapter有所了解。看了鸿洋大神的课程之后,我又上网搜了几个博客,也看了一些源码和文档,于是打算写一个帖子来记录一下自己的学习历程。

  在今天的帖子中,我们从一个最基本的实现BaseAdapter的适配器开始,先介绍ListView性能优化(convertView结合ViewHolder类),再将其封装起来,最后达到可以像SimpleAdapter一样可以一行代码搞定一个ListView的数据绑定。

 

  总结一下,本帖子要实现的功能:

  • 为一个继承自BaseAdapter的原始的Adapter添加ViewHolder,达到缓存的功能
  • 将优化后的ListView进行封装,实现一行代码为ListView绑定数据

 

一、最原始的适配器类的实现

  最原始的思想就是常见一个继承自BaseAdapter的适配器类,在getView()方法中找到子View的布局,获取到子View中的控件,再为其绑定数据。简略代码如下:

 1 @Override
 2 public View getView(int position, View convertView, ViewGroup parent) {
 3     convertView = inflater.inflate(R.layout.sideworks_main_userlist_item, parent, false);
 4     ImageView userPhoto = (ImageView) convertView.findViewById(R.id.find_listitem_photo);
 5     TextView userName = (TextView) convertView.findViewById(R.id.find_listitem_name);
 6     User user = userList.get(position);
 7     userPhoto.setImageResource(user.getPhotoRes());
 8     userName.setText(user.getUserName());
 9     return convertView;
10 }

  这样写代码理论上是没有问题的,但是,看过源码的人都知道,convertView这个参数指的是 The old view to reuse, if possible. 也就是说,convertView是一个以前用过的子View,如果它存在的话,就可以复用它,即只要ListView中存在一个布局和这个子View一样的子View,那么那个子View就可以复用这个convertView。这样就有了一个缓存的机制,也就是靠这个机制,我们可以达到ListView性能优化的目的。

 

二、convertView结合ViewHolder类实现ListView性能优化

未完待续。。。。。。

 

Android之ListView性能优化——万能适配器

标签:

原文地址:http://www.cnblogs.com/blog-wzy/p/5433694.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!