Android开发之中,listview是一个非常重要的组件,它以列表的形式显示用户的数据,用户可以自由的定义LsitView每一列的内容,样式,很多时候使用ListView都需要使用自定义Adapter,自定义Adapter之中最重要的莫过于getView方法了。
getView方法实现主要的三种方法:
1、第一种就是每次都给adapter new一个View载入布局。
例如:
public View getView(int position, View convertView, ViewGroup parent) { View item = mInflater.inflate(R.layout.list_item_icon_text, null); ((TextView) item.findViewById(R.id.text)).setText(DATA[position]); ((ImageView) item.findViewById(R.id.icon)).setImageBitmap( (position & 1) == 1 ? mIcon1 : mIcon2); return item; }
使用这种方式会占据大量内存,十分影响性能(不建议使用)
2、当convertView不为空的时候直接重新使用convertView从而减少了很多不必要的View的创建,然后加载数据。
public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = mInflater.inflate(R.layout.item, parent, false); } ((TextView) convertView.findViewById(R.id.text)).setText(DATA[position]); ((ImageView) convertView.findViewById(R.id.icon)).setImageBitmap( (position & 1) == 1 ? mIcon1 : mIcon2); return convertView; }
这种方式每次都要判断view回收池之中是否有可用的view,如果有则重用;如果没有则,新建View。(可以使用)
3、最快的一种方式:定义一个ViewHolder,将convetView的tag设置为ViewHolder,不为空时重新使用即可
static class ViewHolder { TextView text; ImageView icon; } public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = mInflater.inflate(R.layout.list_item_icon_text, parent, false); 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; }
(推荐使用)
自定义适配器视图getview实现方法比较,布布扣,bubuko.com
时间: 2024-10-11 06:17:51