BaseAdapter的getView方法中对setOnclickListener优化

本文探讨了在应用开发中使用ListView展示列表式界面时,如何通过复用Listener来减少内存开销,避免资源浪费。通过实例演示了在每个Item中设置按钮时,如何实现Listener的复用,从而提升用户体验并优化系统性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在应用开发中凡是又列表式的界面我都采取使用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一样只会初始化一个屏幕可见的个数,虽然这种对象所占内存不大但是积少成多都是危险,在写代码的时候我们需要考虑没一点,同样是积少成多那么整个应用就在一定程度上达到唯美。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值