ListView多佈局展示 異常 陣列下標越界
阿新 • • 發佈:2019-02-03
ListView多佈局展示用處很多
該異常如下:
這是怎麼回事呢?
具體程式碼如下:
public static final int TYPE_MALE = 1;
public static final int TYPE_FEMALE = 2;
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
String sex = list.get(position).getSex();
switch (sex) {
case "男":
return TYPE_MALE;
case "女":
return TYPE_FEMALE;
default:
return TYPE_MALE;
}
}
TYPE_MALE = 1和TYPE_FEMALE = 2,這兩個值不可以隨意賦值,必須從0開始,一次增大
對程式碼做修正其他地方,無需修改就可以正常運行了
public static final int TYPE_MALE = 0;
public static final int TYPE_FEMALE = 1;
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
String sex = list.get(position).getSex();
switch (sex) {
case "男":
return TYPE_MALE;
case "女":
return TYPE_FEMALE;
default:
return TYPE_MALE;
}
}
listView的多佈局展示中getView方法最重要,再次貼出該段程式碼
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View ret = null;
ViewHolder1 holder1 = null;
ViewHolder2 holder2 = null;
int type = getItemViewType(position);
//進行復用,如果convertView為空,根據type生成對應佈局
if (convertView != null) {
ret = convertView;
} else {
switch (type) {
case TYPE_MALE:
ret = LayoutInflater.from(context).inflate(R.layout.item_man, null);
break;
case TYPE_FEMALE:
ret = LayoutInflater.from(context).inflate(R.layout.item_femal, null);
break;
}
}
//例項化ViewHolder ,findViewById
switch (type) {
case TYPE_MALE:
holder1 = (ViewHolder1) ret.getTag();
if (holder1 == null) {
holder1 = new ViewHolder1();
holder1.man_image = ((ImageView) ret.findViewById(R.id.man_image));
holder1.man_name = ((TextView) ret.findViewById(R.id.man_name));
holder1.sex = ((TextView) ret.findViewById(R.id.sex));
ret.setTag(holder1);
}
break;
case TYPE_FEMALE:
holder2 = (ViewHolder2) ret.getTag();
if (holder2 == null) {
holder2 = new ViewHolder2();
holder2.female_image_one = ((ImageView) ret.findViewById(R.id.femal_image_one));
holder2.female_image_two = ((ImageView) ret.findViewById(R.id.femal_image_two));
holder2.female_name = ((TextView) ret.findViewById(R.id.femal_name));
holder2.sex = ((TextView) ret.findViewById(R.id.sex));
ret.setTag(holder2);
}
break;
}
//進行賦值
switch (type) {
case TYPE_MALE:
holder1.man_image.setImageResource(list.get(position).getImage());
holder1.man_name.setText(list.get(position).getName());
holder1.sex.setText(list.get(position).getSex());
break;
case TYPE_FEMALE:
holder2.female_image_one.setImageResource(list.get(position).getImage());
holder2.female_image_two.setImageResource(list.get(position).getImage());
holder2.female_name.setText(list.get(position).getName());
holder2.sex.setText(list.get(position).getSex());
break;
}
return ret;
}