Adapter的作用,顾名思义,作为适配器,在Android中向调用者(如List等)提供整合了数据的View对象。
其主要方法是getView()。该方法返回View对象给需要的调用者(比如List)。怀疑该方法在List布局的时候被调用(还未找到源码)。比如List布局时发现一屏需要插入10个View,就调用Adapter.getView()共10次。
注意:getView()的第二个参数View很重要,如果由List提供了View过来,则无需再创建新的View,直接使用就好。
View的回收??
如何高效使用Adapter?以下转自How you create your view for listview on Android?
How you create your view for listview on Android?
There have three versions of getView() function,
the first version is a slow way,and the last is the fastest one.
Version 1:
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;
}
Version 2:
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;
}
Version 3: the fast way for getView function.
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;
}
The last version use setTag() and getTag() to get a more high performance,
if you use the first or second version of getView(), it is the time to refactoring your code to the third version.
参考:
浙公网安备 33010602011771号