多种布局的ListView和但中布局的ListView唯一不同的是:实现多种布局的ListView的Adapter必须实现getViewTypeCount()和getItemViewType(int position)方法.
getViewTypeCount:告诉管理器你有多少种布局。
getItemViewType:该position需返回哪种布局,必须从0开始。
示例代码如下:
class ScheduleAdapter extends BaseAdapter {
@Override
public int getCount() {
return mCinemaModelList.size();
}
@Override
public Object getItem(int position) {
return mCinemaModelList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
if (mCinemaModelList.get(position) instanceof CinemaModel) {
return 0;
}
return 1;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (mCinemaModelList.get(position) instanceof CinemaModel) {
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.movie_schedulel_cinemainfo, null);
}
TextView cinemaName = (TextView) convertView.findViewById(R.id.movie_schedule_cinema_name);
TextView score = (TextView) convertView.findViewById(R.id.movie_schedule_cinema_score);
TextView minPrice = (TextView) convertView.findViewById(R.id.movie_schedule_cinema_min_price);
TextView address = (TextView) convertView.findViewById(R.id.movie_schedule_cinema_address);
TextView distance = (TextView) convertView.findViewById(R.id.movie_schedule_cinema_distance);
CinemaModel model = (CinemaModel) mCinemaModelList.get(position);
cinemaName.setText(model.name);
double price = model.minPrice / 100.0;
if (model.score == 0) {
score.setText("评分: 暂无");
} else {
score.setText("评分:" + model.score);
}
minPrice.setText("最低价:" + new DecimalFormat("00.00").format(price));
address.setText(model.address);
distance.setText("距离:" + model.distance + "米");
} else {
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.movie_schedulel_item, null);
}
CinemaSchedule cinemaSchedule = (CinemaSchedule) mCinemaModelList.get(position);
TextView startTime = (TextView) convertView.findViewById(R.id.showtime_start);
TextView endTime = (TextView) convertView.findViewById(R.id.showtime_end);
TextView language = (TextView) convertView.findViewById(R.id.showtime_language);
TextView room = (TextView) convertView.findViewById(R.id.showtime_room);
TextView price = (TextView) convertView.findViewById(R.id.showtime_price);
startTime.setText(DateFormat.format("HH:MM", cinemaSchedule.playTime * 1000));
endTime.setText(DateFormat.format("HH:MM", cinemaSchedule.closeTime * 1000));
language.setText(cinemaSchedule.language + "/" + cinemaSchedule.edition);
room.setText(cinemaSchedule.hallName);
price.setText(new DecimalFormat("00.00").format(cinemaSchedule.price / 100.0));
}
return convertView;
}
效果如下: