您的位置:首页 > 移动开发 > Android开发

BaseAdapter的getView()与ViewHolder的两种写法-更深刻理解ViewHolder

2016-12-09 17:19 423 查看
普通android基础书上都会写这种:

private class HomeAdapter extends BaseAdapter{

......

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
ViewHolder holder;
if(convertView==null){
view=View.inflate(UiUtils.getContext(), R.layout.item_app, null);
holder=new ViewHolder();

holder.item_icon=(ImageView) view.findViewById(R.id.item_icon);
holder.item_title=(TextView) view.findViewById(R.id.item_title);
holder.item_size=(TextView) view.findViewById(R.id.item_size);
holder.item_bottom=(TextView) view.findViewById(R.id.item_bottom);
holder.item_rating=(RatingBar) view.findViewById(R.id.item_rating);
view.setTag(holder);
}else{
view=convertView;
holder=(ViewHolder) view.getTag();
}

AppInfo appInfo=datas.get(position);
holder.item_title.setText(appInfo.getName());// 设置应用程序的名字
String size=Formatter.formatFileSize(UiUtils.getContext(), appInfo.getSize());
holder.item_size.setText(size);
holder.item_bottom.setText(appInfo.getDes());
float stars = appInfo.getStars();
holder.item_rating.setRating(stars); // 设置ratingBar的值
String iconUrl = appInfo.getIconUrl();  //http://127.0.0.1:8090/image?name=app/com.youyuan.yyhl/icon.jpg

// 显示图片的控件
bitmapUtils.display(holder.item_icon, HttpHelper.URL+"image?name="+iconUrl);
return view;
}

......
}

static class ViewHolder{
ImageView item_icon;
TextView item_title,item_size,item_bottom;
RatingBar item_rating;
}


这里给出第二种写法【方便抽取DefaultAdapter和BaseViewHolder进行快速开发】

private class HomeAdapter extends BaseAdapter{

......

@Override
public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder holder;
if(convertView==null){

holder=new ViewHolder();

}else{
holder=(ViewHolder) convertView.getTag();
}

AppInfo appInfo=datas.get(position);
holder.setData(appInfo);

return holder.getContentView();
}

......

}
static class ViewHolder{
ImageView item_icon;
TextView item_title,item_size,item_bottom;
RatingBar item_rating;

View contentView;
AppInfo appInfo;

public ViewHolder(AppInfo appInfo){
contentView = initView();
contentView.setTag(this);
}

public void setData(AppInfo appInfo){
this.appInfo = appInfo;
refreshView(appInfo);
}
public View getContentView(){
return contentView;
}
}

public View initView(){
View view;
view = View.inflate(UiUtils.getContext(), R.layout.item_app, null);

this.item_icon=(ImageView) view.findViewById(R.id.item_icon);
this.item_title=(TextView) view.findViewById(R.id.item_title);
this.item_size=(TextView) view.findViewById(R.id.item_size);
this.item_bottom=(TextView) view.findViewById(R.id.item_bottom);
this.item_rating=(RatingBar) view.findViewById(R.id.item_rating);

return view;
}
public void refreshView(AppInfo appInfo){
this.item_title.setText(appInfo.getName());// 设置应用程序的名字
String size=Formatter.formatFileSize(UiUtils.getContext(), appInfo.getSize());
this.item_size.setText(size);
this.item_bottom.setText(appInfo.getDes());
float stars = appInfo.getStars();
this.item_rating.setRating(stars); // 设置ratingBar的值
String iconUrl = appInfo.getIconUrl();  //http://127.0.0.1:8090/image?name=app/com.youyuan.yyhl/icon.jpg

// 显示图片的控件
bitmapUt
4000
ils.display(this.item_icon, HttpHelper.URL+"image?name="+iconUrl);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android ViewHolder