当ListView每个item都比较复杂的时候,复用的时候更新item的内容需要我们找到每一个item中的子控件,来更新他们的内容,查找item中子控件这个过程是
非常浪费时间的,我们可以用setTag的方式将子控件与一个viewholder关联起来,在复用的时候直接getTag即可得到viewholder,节省了查找子控件的时间
//根据listview中要绑定的item子控件来构造viewholder
static class ViewHolder{
ImageView iv_icon;
TextView tv_app_size;
TextView tv_app_name;
}
private class AppManagerAdapter extends BaseAdapter{
private ViewHolder holder;
public int getCount() {
return mSystems.size();
}
public Object getItem(int position) {
AppInfo appInfo;
appInfo =mSystems.get(position - 1 - mUsers.size() - 1);
return appInfo;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
if(convertView != null && convertView instanceof LinearLayout){
view = convertView;
//复用的时候直接getTag,省去了频繁findViewById
holder = (ViewHolder) view.getTag();
}else{
view = View.inflate(AppManagerActivity.this, R.layout.item_app_manager, null);
//创建一个holder对象
holder = new ViewHolder();
//将holder与item子控件关联
holder.iv_icon = (ImageView) view.findViewById(R.id.iv_icon);
holder.tv_app_size = (TextView) view.findViewById(R.id.tv_app_size);
holder.tv_app_name = (TextView) view.findViewById(R.id.tv_app_name);
//设置tag
view.setTag(holder);
}
//获取应用的基本数据。
AppInfo appInfo;
appInfo = mSystems.get(position - 1 - mUsers.size() - 1 );
//设置数据
holder.iv_icon.setImageDrawable(appInfo.getIcon());
holder.tv_app_size.setText(appInfo.getApkSize());
holder.tv_app_name.setText(appInfo.getAppName());
return view;
}
}