Android中级进阶二 ListView巧用convertView

最新版本:Android中级进阶二 ListView巧用convertView

Android中级进阶一ListView使用BaseAdapte我们使用了自己DownloadAdapter,并提到了getView()是来画ListView的每一个条目的。我们把每一个条目都用一个对象来表示,下面的ViewHolder来表示这个对象的类

  1. public class ViewHolder {  
  2.   
  3.     public ImageView mStatusIV;  
  4.   
  5.     public TextView mNameTV;  
  6.   
  7.     public ProgressBar mProgressBar;  
  8.   
  9.     public TextView mCurrentSizeTV;  
  10.   
  11.     public TextView mTotalSizeTV;  
  12.   
  13.     public Button mStatusBtn;  
  14.   
  15.      ……  
  16.   

然后对这个ViewHolder进行实例化,就好了,但是假设我的数据是需要及时刷新的,或者根据一定条件刷新,那getView()方法岂不是需要刷新若干次,那我的UI效率岂不是很低了吗?既然问题提出来了,那一定有解决的办法,我们具体的看下getView()方法:

  1. //这个是关键,是用来对应每一行具体数据的控件的view  
  2.   
  3. public View getView(int position, View convertView, ViewGroup parent) {  
  4.   
  5.            // TODO Auto-generated method stub  
  6.   
  7.            return null;  
  8.   
  9.        } 

每一个参数意义:

position是通过getItemId()获得,既是对象的id,这样就可以合理显示每一个对象存储的数据及控件view

convertView是则是用来画正确的view的对象,ViewHolder实例之后,我们用convertView来转化ViewHolder实例的;

该解决我们刚刚提出来的问题了,获得较高的UI效率的关键就是convertViewViewHolder之间的转换过程;Android中系统自带有recycling View机制,所以这样子设计看看效果如何:

  1. public View getView(int position, View convertView, ViewGroup parent) {  
  2.            // TODO Auto-generated method stub  
  3.              final ViewHolder viewHolder ;  
  4.            if (convertView == null) {  
  5.                viewHolder = new ViewHolder();  
  6.                convertView = mInflater.inflate(R.layout.download_item, null);  
  7.                  
  8.                viewHolder.mStatusIV = (ImageView) convertView.findViewById(R.id.status_image);  
  9.                  
  10.                viewHolder.mNameTV = (TextView) convertView.findViewById(R.id.name_TV);  
  11.                  
  12.       <span style="white-space:pre">      </span>//......其他view  
  13.                  
  14.                convertView.setTag(viewHolder);  
  15.   
  16.            } else {  
  17.                viewHolder = (ViewHolder) convertView.getTag();   
  18.            }  
  19.       // ......接下来可以对你的数据进行进一步的操作了  
  20.            return convertView;  
  21.        }  

这样应该得到不错的缓解了,至于recycling View机制,待我在认真研究之后,再续上,谢谢!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值