ListView实现多类型视图

来源:互联网 发布:源码网 编辑:程序博客网 时间:2024/05/04 15:57

项目中显示个人信息需要显示多种类型的数据,在ListView上显示处理显示

1.想要ListView实现多类型视图显示一定会想到getItemViewType(int position)方法和getViewTypeCount()

getItemViewType(int position)确认当前位置显示的视图类型,注意事项返回的视图类型值不能超过getViewTypeCount()方法返回的数量
例如:
//当前视图的类型数量
@Override
public int getViewTypeCount() {
return 3;
}
//返回每条内容显示的视图类型,即返回的值只能是0-2之间
@Override
public int getItemViewType(int position) {
if(position == 0){
return 0;//ListView_Head;
}else if(position == 5){
return 1;//ListView_Hobby;
}else{
return 2;//ListView_Item;
}

}

2.以下是自定义的Adapter,可以显示多类型视图

/**
 * 个人信息Adapter
 */
public class PersonInfoAdapter extends BaseAdapter {
//视图类型数量
private static final int TYPE_COUNT = 3;
private static final int ITEM_COUNT = 8;
private static final int ListView_Head_TYPE = 0;
private static final int ListView_Item_TYPE = 1;
private static final int ListView_Hobby_TYPE = 2;
//视图类型layout
private static final int ListView_Head = R.layout.fragment_personinfo_head;
private static final int ListView_Item = R.layout.fragment_personinfo_item;
private static final int ListView_Hobby = R.layout.fragment_personinfo_hobby;
//个人信息标题
private String[] personinfos;
private UserData userData;

public PersonInfoAdapter(Context context, UserData userData) {
personinfos = context.getResources().getStringArray(R.array.person_info);
this.userData = userData;
}

@Override
public int getViewTypeCount() {
return TYPE_COUNT;
}


@Override
public int getItemViewType(int position) {
if(position == 0){
return ListView_Head_TYPE;//ListView_Head;
}else if(position == 5){
return ListView_Item_TYPE;//ListView_Hobby;
}else{
return ListView_Hobby_TYPE;//ListView_Item;
}
}


@Override
public int getCount() {
return ITEM_COUNT;
}


@Override
public Object getItem(int position) {
return null;
}


@Override
public long getItemId(int position) {
return position;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
HeadViewHolder headViewHolder = null;
ItemViewHolder itemViewHolder = null;
ItemViewHolder hobbyViewHolder = null;

int type = getItemViewType(position);
//获取视图信息
switch (type) {
case ListView_Head_TYPE:
if(convertView == null){
headViewHolder = new HeadViewHolder();
convertView = LayoutInflater.from(parent.getContext()).inflate(ListView_Head, null);
headViewHolder.head = (ImageView)convertView.findViewById(R.id.head);
headViewHolder.age = (TextView)convertView.findViewById(R.id.age);
headViewHolder.constellation = (TextView)convertView.findViewById(R.id.constellation);
headViewHolder.height = (TextView)convertView.findViewById(R.id.height);
convertView.setTag(headViewHolder);
}else{
headViewHolder = (HeadViewHolder)convertView.getTag();
}
break;
case ListView_Item_TYPE:
if(convertView == null){
itemViewHolder = new ItemViewHolder();
convertView = LayoutInflater.from(parent.getContext()).inflate(ListView_Item, null);
itemViewHolder.istarted = (TextView)convertView.findViewById(R.id.istarted);
itemViewHolder.badage = (TextView)convertView.findViewById(R.id.badage);
convertView.setTag(itemViewHolder);
}else{
itemViewHolder = (ItemViewHolder)convertView.getTag();
}
break;
case ListView_Hobby_TYPE:
if(convertView == null){
hobbyViewHolder = new ItemViewHolder();
convertView = LayoutInflater.from(parent.getContext()).inflate(ListView_Hobby, null);
hobbyViewHolder.istarted = (TextView)convertView.findViewById(R.id.hobby);
hobbyViewHolder.badage = (TextView)convertView.findViewById(R.id.hobby_tv);
convertView.setTag(hobbyViewHolder);
}else{
hobbyViewHolder = (ItemViewHolder)convertView.getTag();
}
break;
default:
break;
}
//更新内容
switch (type) {
case ListView_Head_TYPE:
headViewHolder.age.setText(userData.getNickname());
break;
case ListView_Item_TYPE:
itemViewHolder.istarted.setText(personinfos[position-1]);
break;
case ListView_Hobby_TYPE:
hobbyViewHolder.istarted.setText(personinfos[position-1]);
break;
default:
break;
}
return convertView;
}

//头像ViewHolder
public static class HeadViewHolder{
public ImageView head;
private TextView age;
private TextView constellation;
private TextView height;
}

//Item的ViewHolder
public static class ItemViewHolder{
private TextView istarted;
private TextView badage;
}

0 0
原创粉丝点击