一個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;
}
}