我们使用listview的时候总不可避免的会使用ViewHolder,今天我来说两种ViewHolder的使用方式
1 这是最普遍的使用方式
//holder类
static class ViewHolder{
TextView title
RatingBar ratingBar
TextView time
TextView kouwei
}
getView方法
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ReCaiBean.ObjBean.DataBean dataBean = list.get(i)
ViewHolder viewHolder = null
if (view == null) {
viewHolder = new ViewHolder()
viewHolder.icon = (ImageView) view.findViewById(R.id.icon)
viewHolder.title = (TextView) view.findViewById(R.id.title)
viewHolder.time = (TextView) view.findViewById(R.id.time)
viewHolder.kouwei = (TextView) view.findViewById(R.id.kouwei)
viewHolder.ratingBar = (RatingBar) view.findViewById(R.id.rating)
view.setTag(viewHolder)
}
viewHolder = (ViewHolder) view.getTag()
viewHolder.title.setText(dataBean.getTitle())
viewHolder.time.setText(dataBean.getStep()+"/"+dataBean.getMt())
viewHolder.kouwei.setText(dataBean.getKouwei()+"/"+dataBean.getGongyi())
viewHolder.icon.setTag(dataBean.getTitlepic())
viewHolder.icon.setImageBitmap(null)
String rate = dataBean.getRate()
viewHolder.ratingBar.setRating(Float.parseFloat(rate))
return view
}
2 这是我今天要说的第二种方式
public class MyHolder {
private View convertView;
private int id;
private Context mContext;
public TextView title;
public RatingBar ratingBar;
public TextView time;
public TextView kouwei;
public MyHolder(Context context, @LayoutRes int id) {
mContext = context;
convertView = LayoutInflater.from(context).inflate(id, null);
this.id = id;
convertView.setTag(this);
}
public static MyHolder getHolder(View convertView, Context context, @LayoutRes int id) {
MyHolder myHolder = null;
if (convertView == null) {
myHolder = new MyHolder(context, id);
} else {
myHolder = (MyHolder) convertView.getTag();
}
return myHolder;
}
}
getView方法
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MyHolder viewHolder = MyHolder.getHolder(convertView, parent.getContext(), R.layout.item_listview);
viewHolder.title.setText(dataBean.getTitle());
viewHolder.time.setText(dataBean.getStep()+"/"+dataBean.getMt());
viewHolder.kouwei.setText(dataBean.getKouwei()+"/"+dataBean.getGongyi());
viewHolder.ratingBar.setRating(Float.parseFloat(rate));
return convertView;
}