先定义布局的数量,布局的类型,布局的标记
private int level = 0;//选择哪种类型的布局文件的标记
private final int TYPE_1 = 0; //布局类型一
private final int TYPE_2 = 1; //布局类型二
private final int TYPE_3 = 2; //布局类型三
private final int VIEW_TYPE = 3; //总布局数
然后,重写baseAdapter的方法
@Override
public int getViewTypeCount() {
return VIEW_TYPE;
}
@Override
public int getItemViewType(int position) {
if(0 == position)
return TYPE_1;
else if(1 == position)
return TYPE_2;
else if(2 == position)
return TYPE_3;
else
return TYPE_1;
}
最后,在getView()方法中根据level来选择你当前的布局类型
public View getView(int position, View view, ViewGroup arg2) {
ViewHolder viewHolder = null;
DataItem mContent = list.get(position);
int type = getItemViewType(level);
if (view == null) {
viewHolder = new ViewHolder();
switch (type) {
case TYPE_1:
view = LayoutInflater.from(mContext).inflate(R.layout.personal_contact_list_item, null);
initView(view,viewHolder,0);
break;
case TYPE_2:
view = LayoutInflater.from(mContext).inflate(R.layout.teacher_contact_list_item, null);
initView(view,viewHolder,1);
break;
case TYPE_3:
view = LayoutInflater.from(mContext).inflate(R.layout.public_contact_list_item, null);
initView(view,viewHolder,2);
break;
default:
break;
}
view.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) view.getTag();
}
//根据position获取分类的首字母的Char ascii值
int section = getSectionForPosition(position);
//如果当前位置等于该分类首字母的Char的位置 ,则认为是第一次出现
if(position == getPositionForSection(section)){
viewHolder.tvLetter.setVisibility(View.VISIBLE);
viewHolder.tvLetter.setText(mContent.getSortLetters());
}else{
viewHolder.tvLetter.setVisibility(View.GONE);
}
switch (type) {
case TYPE_1:
initData(viewHolder,mContent,0,position);
break;
case TYPE_2:
initData(viewHolder,mContent,1,position);
break;
case TYPE_3:
initData(viewHolder,mContent,2,position);
break;
};
return view;
}