面试之 listview优化

本文介绍了Android开发中ListView的三种优化方式,包括直接inflate布局、复用convertView及使用ViewHolder模式,有效减少View创建,提高应用性能。

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

摘用别人的,谢谢作者

Adapter的作用是界面与数据之间的桥梁,通过设置适配器至ListView控件后(如调用ListView的 setAdapter(ListAdapter adapter) ),列表的每一项会显示至页面中。其实,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View,如: @Override public View getView(int position, View convertView, ViewGroup parent) { return super.getView(position, convertView, parent); } 我们看一看下面的这段代码: public View getView(int position, View convertView, ViewGroup parent) { View newView = mInflater.inflate(R.layout.list_item, null); ((TextView) newView .findViewById(R.id.text)).setText(DATA[position]); ((ImageView) newView .findViewById(R.id.icon)).setImageBitmap( (position & 1) == 1 ? mIcon1 : mIcon2); return newView ; } 上面的代码块中,我通过LayoutInflater.inflate(,)将Layout文件–layout.list_item转换为View. (注:Layout也是View的子类,但在android中如果想将xml中的Layout转换为View放入.java代码中操作,只能通过Inflater,而不能通过findViewById()) 这时,如果我的ITEM项有数以千条这样多或更多呢,再以上面代码块的写法,后果自己想想吧。

于是,改用其它一种写法: public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = mInflater.inflate(R.layout.list_item, null); } ((TextView) convertView.findViewById(R.id.text)).setText(DATA[position]); ((ImageView) convertView.findViewById(R.id.icon)).setImageBitmap( (position & 1) == 1 ? mIcon1 : mIcon2); return convertView; } 这时,上面的代码是不是好了很多?系统将会减少创建很多View。性能得到了很大的提升。 到这里,问一下,还有没有优化的方法呢,是有的,请看————》》: public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = mInflater.inflate(R.layout.list_item_icon_text, null); holder = new ViewHolder(); holder.text = (TextView) convertView.findViewById(R.id.text); holder.icon = (ImageView) convertView.findViewById(R.id.icon); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.text.setText(DATA[position]); holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2); return convertView; }

static class ViewHolder { TextView text; ImageView icon; } 这样系统性能会得到更大的提升。 希望可能帮助到大家。这也是平时面试当中面试官经常会问到的”ListView的优化”的问题。

转载于:https://my.oschina.net/chaloongjir/blog/209731

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值