android开发中,listview的item中显示不同的布局,即每一个item中的布局是不一样的。
1、继承BaseAdapter类,除了其他一些必须重现的方法之外,还需要重写getViewTypeCount和getItemViewType这两个方法。其中getViewTypeCount方法返回listview中的布局个数,getItemViewType方法返回每一个item中布局的标志。最后在getView方法中根据不同的布局标志为每一个item加载不同的布局。
示例代码:
public class MyInfoListViewAdapter extends BaseAdapter { private List<MyInfoItem> myInfoItemList; private final int mItemTypeCount = 3; private final int mType1 = 0; private final int mType2 = 1; private final int mType3 = 2; public MyInfoListViewAdapter(List<MyInfoItem> list){ this.myInfoItemList = list; } @Override public int getCount() { return myInfoItemList.size(); } @Override public Object getItem(int position) { return myInfoItemList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { MyViewHolder myViewHolder = null; MyViewHolder1 myViewHolder1 = null; MyViewHolder2 myViewHolder2 = null; int type = getItemViewType(position); if(convertView == null){ switch (type){ case mType1: //加载布局1 break; case mType2: //加载布局2 break; case mType3: //加载布局3 break; default: break; } }else { switch (type){ case mType1: break; case mType2: break; case mType3: break; default: break; } } //处理不同的逻辑 switch (type){ case mType1: break; case mType2: break; case mType3: break; } return convertView; } @Override public int getViewTypeCount() { return mItemTypeCount; } // 每个convertview都会调用此方法,获得当前所需要的view样式 @Override public int getItemViewType(int position) { return myInfoItemList.get(position).getType(); } private class MyViewHolder{ public TextView textView; } private class MyViewHolder1{ public TextView textView; public TextView textView1; } private class MyViewHolder2{ public TextView textView; public ImageView imageView; } }
2、关于listView中item显示不同的布局时,出现getItemViewType方法中数据越界的异常的情况,例如listview中的item显示3个不同的布局,则getItemViewType中返回的布局标志不能等于或者大于3,一定要比3小;如以上代码中的mType1=0,mType2=1,mType3=2,这样才不会出现数组越界的异常,若mType1 = 1;mType2=2,mType3=3,则会出现数组越界的异常。因为getItemViewType返回的值要小于getViewTypeCount的值,即最大的值为getViewTypeCount-1。