Android ListView中添加多个item布局
效果
思路
在自定义Adapter中
- 重写getItemViewType()方法用来判断当前Item对象的类别
- 重写getViewTypeCount()返回item一共有几个类别
- 在geView方法中通过判断类别来填充不同的item布局并给控件设置值
代码
MutiLayoutAdapter
package com.example.listviewtest;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
public class MutiLayoutAdapter extends BaseAdapter {
//定义两个类别标志
private static final int TYPE_BOOK = 0;
private static final int TYPE_APP = 1;
private Context mContext;
private ArrayList<Object> mData = null;
public MutiLayoutAdapter(Context mContext, ArrayList<Object>mData){
this.mContext = mContext;
this.mData = mData;
}
@Override
public int getCount() {
return mData.size();
}
@Override
public Object getItem(int i) {
return mData.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
//判断类别
@Override
public int getItemViewType(int position) {
if (mData.get(position)instanceof App){
return TYPE_APP;
}else if (mData.get(position)instanceof Book){
return TYPE_BOOK;
}else {
return super.getItemViewType(position);
}
}
//类别数目
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
int type = getItemViewType(position);
ViewHolder1 holder1 = null;
ViewHolder2 holder2 = null;
if (convertView == null){
switch (type){
case TYPE_APP:
holder1 = new ViewHolder1();
convertView = LayoutInflater.from(mContext).inflate(R.layout.item_one,parent,false);
holder1.img_icon = (ImageView)convertView.findViewById(R.id.img_icon);
holder1.txt_aname = (TextView)convertView.findViewById(R.id.txt_aname);
convertView.setTag(R.id.Tag_APP,holder1);
break;
case TYPE_BOOK:
holder2 = new ViewHolder2();
convertView = LayoutInflater.from(mContext).inflate(R.layout.item_two,parent,false);
holder2.txt_bname = (TextView)convertView.findViewById(R.id.txt_bname);
holder2.txt_bauthor = (TextView)convertView.findViewById(R.id.txt_bauthor);
convertView.setTag(R.id.Tag_Book,holder2);
break;
}
}else {
switch (type){
case TYPE_APP:
holder1 = (ViewHolder1)convertView.getTag(R.id.Tag_APP);
break;
case TYPE_BOOK:
holder2 =(ViewHolder2)convertView.getTag(R.id.Tag_Book);
break;
}
}
Object obj = mData.get(position);
//设置控件的值
switch(type){
case TYPE_APP:
App app = (App)obj;
if (app!=null){
holder1.img_icon.setBackgroundResource(app.getaIcon());
holder1.txt_aname.setText(app.getaName());
}
break;
case TYPE_BOOK:
Book book = (Book)obj;
if (book!=null){
holder2.txt_bname.setText(book.getbName());
holder2.txt_bauthor.setText(book.getbAuthor());
}
break;
}
return convertView;
}
private static class ViewHolder1{
ImageView img_icon;
TextView txt_aname;
}
private static class ViewHolder2{
TextView txt_bname;
TextView txt_bauthor;
}
}