码迷,mamicode.com
首页 > 其他好文 > 详细

BaseAdapter的getView方法中对setOnclickListener优化

时间:2015-08-18 22:43:59      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:优化   listview   

在应用开发中凡是又列表式的界面我都采取使用ListView来呈现界面,并且需要一个BaseAdapter来加载数据进去,所以我们就需要重写getView方法,那么问题来了,在每一个Item都有一个按钮的话我们需要给按钮setOnclickListener,假设我们按一下代码来写的话:

ActiveClick ac = new ActiveClick();
convertView.findViewById(R.id.main).setOnClickListener(ac);

通过打印我们可以看到log日志:
技术分享

每一个的Listener的地址都不一样也就是说每一项的都会有一个Listener占据着内存,这样上下滑动又是数不清的内存被占用了,就违背了ListView的复用精神了,内存开销太大了,所以我们需要往复用的方向去写,所以:

ActiveInfoClick ac;?
if (null == view) {?
    holder = new ViewHolder();
    .
    .   
    .?
    ac = new ActiveClick();?
    view.setTag(holder);?
    view.setTag(R.id.info_image, imageClick);?
} else {?
    holder = (ViewHolder) view.getTag();?
    ac = (ActiveClick) view.getTag(R.id.info_image);?
}
holder.infoImage.setOnClickListener(ac);

通过上面的代码我们优先的复用了Listener,依然通过log日志查看:
技术分享

由于界面的item高度比较大,所以6个需要滑动屏幕一次。可以看出来456已经复用之前的listener,也就是说Listener的个数就会跟ListView一样只会初始化一个屏幕可见的个数,虽然这种对象所占内存不大但是积少成多都是危险,在写代码的时候我们需要考虑没一点,同样是积少成多那么整个应用就在一定程度上达到唯美。

版权声明:本文为博主原创文章,未经博主允许不得转载。

BaseAdapter的getView方法中对setOnclickListener优化

标签:优化   listview   

原文地址:http://blog.csdn.net/neacy_zz/article/details/47761031

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