ListView显示多种item
适配器中重写以下两个方法
//item的状态数量
@Override
public int getViewTypeCount() {
return 2;
}
//判断是哪一种状态
@Override
public int getItemViewType(int position) {
if (position % 2 == 0) {
return TYPE_NEWS_1;
} else {
return TYPE_NEWS_2;
}
}
详细代码如下
public class MyAdapter extends BaseAdapter {
private List<News> data;
private Context mContext;
//定义两种状态
private static final int TYPE_NEWS_1 = 0;
private static final int TYPE_NEWS_2 = 1;
public MyAdapter() {
}
public MyAdapter(List<News> data, Context mContext) {
this.data = data;
this.mContext = mContext;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
//item的状态数量
@Override
public int getViewTypeCount() {
return 2;
}
//判断是哪一种状态(此处只写了两个状态的,开发中根据不同item数量,根据不同参数判断选择哪个type)
@Override
public int getItemViewType(int position) {
if (position % 2 == 0) {
return TYPE_NEWS_1;
} else {
return TYPE_NEWS_2;
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//获取当前itam的状态
int type = getItemViewType(position);
ViewHolder holder = null;
ViewHolder2 holder2 = null;
if (convertView == null) {
//根据状态 type判断,根据不同状态,绑定不同的 xml 文件.
switch (type) {
case TYPE_NEWS_1:
holder = new ViewHolder();
convertView = LayoutInflater.from(mContext).inflate(R.layout.listview_item_one, parent, false);
holder.img = convertView.findViewById(R.id.img);
holder.title = convertView.findViewById(R.id.title_tv);
holder.context = convertView.findViewById(R.id.context_tv);
convertView.setTag(holder);
break;
case TYPE_NEWS_2:
holder2 = new ViewHolder2();
convertView = LayoutInflater.from(mContext).inflate(R.layout.listview_item_two, parent, false);
holder2.img = convertView.findViewById(R.id.img);
holder2.title = convertView.findViewById(R.id.title_tv);
holder2.context = convertView.findViewById(R.id.context_tv);
convertView.setTag(holder2);
break;
}
} else {
switch (type) {
case TYPE_NEWS_1:
holder = (ViewHolder) convertView.getTag();
break;
case TYPE_NEWS_2:
holder2 = (ViewHolder2) convertView.getTag();
break;
}
}
switch (type) {
case TYPE_NEWS_1:
holder.img.setBackgroundResource(data.get(position).getImg());
holder.title.setText(data.get(position).getTitle());
holder.context.setText(data.get(position).getContext());
break;
case TYPE_NEWS_2:
holder2.img.setBackgroundResource(data.get(position).getImg());
holder2.title.setText(data.get(position).getTitle());
holder2.context.setText(data.get(position).getContext());
break;
}
return convertView;
}
static class ViewHolder {
ImageView img;
TextView title;
TextView context;
}
static class ViewHolder2 {
ImageView img;
TextView title;
TextView context;
}
}
效果图如下