一个ListView的item当数据不同时,要使用不同的布局,代码如下:
(1)先自定义一个Adapter适配器,里面多加几个方法
public class XListViewAdapter extends BaseAdapter{
private ArrayList<TouTiaoBean> mArrayListBean = new ArrayList<TouTiaoBean>();
private LayoutInflater layoutInflater;
public XListViewAdapter(Context context){
layoutInflater = LayoutInflater.from(context);
}
public void setData(ArrayList<TouTiaoBean> arrayListBean){
mArrayListBean = arrayListBean;
notifyDataSetChanged();
}
@Override
public int getCount() {
return mArrayListBean.size();
}
@Override
public Object getItem(int position) {
return mArrayListBean.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
/**
* 根据数据的不同划分类型
* @param position
* @return
*/
@Override
public int getItemViewType(int position) {
if (mArrayListBean.get(position).getImgextraArrayList() != null) {
return 0;
}else if (mArrayListBean.get(position).getEditor() != null) {
return 1;
}else{
return 2;
}
}
/**
* 确定返回类型的个数,对应下面getView()方法里要使用几个ViewItem类
* @return
*/
@Override
public int getViewTypeCount() {
return 3;
}
/**
* 根据不同类型,返回不同布局
* @param position
* @param convertView
* @param parent
* @return
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (getItemViewType(position) == 0) {
return getViewImg(position, convertView, parent);
}else if (getItemViewType(position) == 1) {
return null;//这里不能返回空,不然会报空指针,而且不会报哪个位置空指针
}else if(getItemViewType(position) == 2){
return getViewNormal(position, convertView, parent);
}else{
return null;//这里不能返回空,不然会报空指针,而且不会报哪个位置空指针
}
}
/**
* 返回的其中一种布局方法
* @param position
* @param convertView
* @param parent
* @return
*/
public View getViewNormal(int position, View convertView, ViewGroup parent){
View v;
ViewItemNormal viewItemNormal;
if (convertView == null){
viewItemNormal = new ViewItemNormal();
v = layoutInflater.inflate(R.layout.toutiao_xlistview_item_normal_layout,null);
viewItemNormal.titleImg = (ImageView) v.findViewById(R.id.toutiao_xlistview_item_normal_titleimg);
viewItemNormal.titleTxt = (TextView) v.findViewById(R.id.toutiao_xlistview_item_normal_title_txt);
viewItemNormal.contentTxt = (TextView) v.findViewById(R.id.toutiao_xlistview_tiem_normal_content_txt);
v.setTag(viewItemNormal);
}
else{
v = convertView;
viewItemNormal = (ViewItemNormal) v.getTag();
}
TouTiaoBean touTiaoBean = (TouTiaoBean) getItem(position);
Picasso.with(getActivity()).load(touTiaoBean.getImgsrc()).into(viewItemNormal.titleImg);
viewItemNormal.titleTxt.setText(touTiaoBean.getTitle());
viewItemNormal.contentTxt.setText(touTiaoBean.getDigest());
return v;
}
/**
* 返回的第二种布局方法
* @param position
* @param convertView
* @param parent
* @return
*/
public View getViewImg(int position, View convertView, ViewGroup parent){
View v;
ViewItemImg viewItemImg;
if (convertView == null){
viewItemImg = new ViewItemImg();
v = layoutInflater.inflate(R.layout.toutiao_xlistview_item_img_layout,null);
viewItemImg.aboveTxt = (TextView) v.findViewById(R.id.toutiao_xlistview_item_img_above_txt);
viewItemImg.leftImg = (ImageView) v.findViewById(R.id.toutiao_xlistview_item_img_leftimg);
viewItemImg.midImg = (ImageView) v.findViewById(R.id.toutiao_xlistview_item_img_midimg);
viewItemImg.rightImg = (ImageView) v.findViewById(R.id.toutiao_xlistview_item_img_rightimg);
v.setTag(viewItemImg);
}
else{
v = convertView;
viewItemImg = (ViewItemImg) v.getTag();
}
TouTiaoBean touTiaoBean = (TouTiaoBean) getItem(position);
viewItemImg.aboveTxt.setText(touTiaoBean.getTitle());
Picasso.with(getActivity()).load(touTiaoBean.getImgsrc()).into(viewItemImg.leftImg);
Picasso.with(getActivity()).load(touTiaoBean.getImgextraArrayList().get(0)).into(viewItemImg.midImg);
Picasso.with(getActivity()).load(touTiaoBean.getImgextraArrayList().get(1)).into(viewItemImg.rightImg);
return v;
}
public class ViewItemNormal {
ImageView titleImg;
TextView titleTxt;
TextView contentTxt;
}
public class ViewItemImg{
TextView aboveTxt;
ImageView leftImg;
ImageView midImg;
ImageView rightImg;
}
}