原文地址:http://www.cnblogs.com/error404/archive/2011/08/03/2126682.html
Adapter是listview和数据源间的中间人。
当每条数据进入可见区域时,adapter的getview()会被调用,返回代表具体数据的视图。触摸滚动时,频繁调用。支持成百上千条数据。
下面为显示每条数据的xml文件:
<LinearLayout
xmlns: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_gravity=
"center_vertical"
android:layout_width=
"0dip"
android:layout_weight=
"1.0"
android:layout_height=
"wrap_content"
/>
</LinearLayout>
1
。最简单的方法,最慢且最不实用
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.findViewButId(R.id.icon)).
setImageBitmap((pos &
1
) ==
1
? mIcon1 : mIcon2);
return
item;
}
2
。利用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.findViewButId(R.id.icon)).
setImageBitmap((pos &
1
) ==
1
? mIcon1 : mIcon2);
return
convertView;
}
3
。利用viewholder模式,效率在提高
50
%
static
class
ViewHolder {
TextView text;
ImageView icon;
}
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.findViewButId(
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;
}
adapter更新效率比较:
1
的更新不到
10
frames/second
2
的更新接近
30
frames/second
3
的更新接近
40
frames/second
背景和图像
视图背景图像总会填充整个视图区域
1
。图像尺寸不合适会导致自动缩放
2
。避免实时缩放
3
。最好预先缩放到视图大小
originalImage = Bitmap.createScaledBitmap(
originalImage,
//
-
顶
-
0
-
踩
-
0
- 上一篇android - Gesture学习 -GestureOverlayView
- 下一篇android 开发代码 杂七杂八