Android的ListView需要一个适配器来取得所需的信息,包括list列数和item的UI等等。
其中适配器的getView方法很重要,他负责返回每个所需要显示的list item的VIew,也就是UI
public View getView(int position, View view, ViewGroup parent);这是getView方法的定义,使用者需要按自己的需求重写它, 返回一个用于显示item的view。第一个参数是list的位置 ,第三个参数一般情况用不到,不用赘述;关键在于第二个参数view,这个参数有时候为null而有时候不是,这是因为ListView有一个重用item view的机制,使得使用者不比每次都新建view,从而提高性能。
经过测试笔者发现,ListView会新建1屏+2的view(+2应该是用于上下滑动时的需要),而以后所有对getView的调用都会传入以前返回过的view,所以重写getView的时候应该充分利用这个特点。
下面是测试程序的关键代码:
public class TestAdapter extends BaseAdapter {
private final static int ITEM_NUM = 50;
private int mIndex = 0;
private LayoutInflater mInflater;
public TestAdapter(Context context) {
mInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return ITEM_NUM;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
ViewHolder viewHolder = null;
if (view == null) {
viewHolder = new ViewHolder();
view = mInflater.inflate(R.layout.item, null);
viewHolder.position = (TextView) view.findViewById(R.id.position);
viewHolder.content = (TextView) view.findViewById(R.id.content);
viewHolder.content.setText(String.valueOf(mIndex++));
view.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) view.getTag();
}
viewHolder.position.setText(String.valueOf(position));
return view;
}
static class ViewHolder {
TextView position;
TextView content;
}
}