1、未优化前的使用方式
ListView mListView = (ListView)findViewById(R.id.lv);
mListView.setAdapter(new BaseAdapter(){
@Override
public long getItemId(int position) {
return position;
}
@Override
public Object getItem(int position) {
return datas.get(position);
}
@Override
public int getCount() {
return itemNames.length;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = View.inflate(MainActivity.this, R.layout.lv_item, null);
TextView textView = (TextView) view.findViewById(R.id.lv_item_tv);
textView.setText(datas.get(position));
return view;
}
});
未经优化的使用方式下系统在每次显示ListView的子条目的时候都会加载布局和查找控件
2、复用加载的视图
ListView mListView = (ListView)findViewById(R.id.lv);
mListView.setAdapter(new BaseAdapter(){
@Override
public long getItemId(int position) {
return position;
}
@Override
public Object getItem(int position) {
return datas.get(position);
}
@Override
public int getCount() {
return itemNames.length;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = View.inflate(MainActivity.this, R.layout.lv_item, null);
}
TextView textView = (TextView) convertView.findViewById(R.id.lv_item_tv);
textView.setText(datas.get(position));
return convertView;
}
});
采用这种方式系统在每次显示ListView的子条目的时候都会使用已加载的布局,但每次显示的时候还是会从视图中查找控件
3、复用加载的视图和已查找到的控件
class ViewHolder {
private TextView tv;
}
ListView mListView = (ListView)findViewById(R.id.lv);
mListView.setAdapter(new BaseAdapter(){
@Override
public long getItemId(int position) {
return position;
}
@Override
public Object getItem(int position) {
return datas.get(position);
}
@Override
public int getCount() {
return itemNames.length;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = View.inflate(MainActivity.this, R.layout.lv_item, null);
viewHolder.tv = (TextView) convertView.findViewById(R.id.lv_item_tv);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.tv.setText(datas.get(position));
return convertView;
}
});