BaseAdapter的getView方法中对setOnclickListener优化

在应用开发中凡是又列表式的界面我都采取使用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优化

相关文章:

你感兴趣的文章:

标签云: