Android中的适配器的高效写法
Adapter是ListView和数据源之间的中间人:

当每一条数据进入可见区时:
Adapter的getView()会被调用;
返回代表具体数据的视图;
触屏滚动时,频繁调用
支持成百上千条数据
显示每一条数据的XML布局文件

<LinearLayout xmsns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" > <ImageView android:id="@+id/icon" android:layout_width="48dip" android:layout_height="48dip" /> <TextView android:id="@+id/text" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_weight="1.0" /> </LinearLayout>
最简单、最慢、最不实用的方法:
public View getView(int pos, View convertView, ViewGroup parent) { View item = mInflater.inflate(R.layout.list_item, null); ((TextView)item.findViewById(R.id.text)).setText(DATA[pos]); ((ImageView)item.findViewById(R.id.icon)).setImageBitmap((pos & 1 ) == 1 ? mIcon1 : mIcon2); return item; }
利用convertView回收视图,效率提高200%
public View getView(int pos, View convertView, ViewGroup parent) { if(convertView == null) { convertView = mInflater.inflate(R.layout.list_item, null); } ((TextView)convertView.findViewById(R.id.text)).setText(DATA[pos]); ((ImageView)convertView.findViewById(R.id.icon)).setImageBitmap((pos & 1 ) == 1 ? mIcon1 : mIcon2); return convertView; }
使用ViewHolder模式,效率可以再提高50%
ViewHolder类:
static class ViewHolder { TextView text; ImageView icon; }
使用ViewHolder模式
public View getView(int pos, View convertView, ViewGroup parent) { ViewHolder holder; if(convertView == null) { convertView = mInflater.inflate(R.layout.list_item, 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[pos]); holder.icon.setImageBitmap((pos & 1 ) == 1 ? mIcon1 : mIcon2); return convertView; }
文章来自网络
浙公网安备 33010602011771号