为什么我的适配器第一次显示正常,可以显示所有的数据,第二次调用的时候,只显示最后一条数据,

为什么我的适配器第一次显示正常,可以显示所有的数据,第二次调用的时候,只显示最后一条数据,而且是重复显示多次,有几条数据显示几次,数据是没有错的
public class GridViewAdapter extends BaseAdapter {
private List list;
LayoutInflater inflater;
PopupActivity popupActivity;
public GridViewAdapter(PopupActivity popupActivity,List list) {

    this.list = list;
    this.popupActivity=popupActivity;
    inflater = (LayoutInflater) popupActivity
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return list.size();
}

@Override
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return list.get(position);
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
}
ViewHolder holder;
int p;
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    p=position;
    holder = null;
    if (convertView == null) {
        convertView = inflater.inflate(R.layout.photo_item, null);
        holder = new ViewHolder();
        holder.img = (ImageView) convertView.findViewById(R.id.ItemImage);
        holder.userlevel_1 = (TextView) convertView.findViewById(R.id.ItemText);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    final Map map = (Map) list.get(position);
    //displayImage(map.get("ItemImage").toString(), holder.img);
    holder.img.setImageBitmap(popupActivity.getLoacalBitmap(map.get("ItemImage").toString()));
    holder.userlevel_1.setText(map.get("ItemText").toString());
    Log.i("2222222222222222222222222", map.get("ItemText").toString());
    /*convertView.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            popupActivity.changeHeadIcon(p);
        }
    });*/
    return convertView;
}


public static class ViewHolder {
    public ImageView img;
    public TextView userlevel_3;
    public TextView userlevel_2;
    public TextView userlevel_1;
    public TextView gf_name;
    public TextView goods_name;
    public TextView lowest_price;
    public TextView sale_count;
    public LinearLayout suits;
    public LinearLayout suits1;
}

}

holder = null;你在getVIew里面把这一句去掉试试

convertview不为空的情况下数据第二次获取的时候重复了,复用没有处理好;在getView方法里面这样写就可以了
ViewHolder holder = null;
if(convertView != null){
holder = convertview.getTag();
}else{
holder = new ViewHolder();
...
}
还有你这个int p 不觉得没有什么用吗?

一个子项弄了那么多控件,是什么效果,有空我运行下。。。。