解决方案 »

  1.   

    你在getView()中是不是优化了adapter?而且是类似于这么写的?
    if (convertView == null) {
                    convertView = mInflater.inflate(R.layout.list_item, null);
                    ((TextView) convertView.findViewById(R.id.text1)).setText(mData[position]);
                }
                else
                    return convertView;
    没有通过tag方式来设置并获取当前数据。 
      

  2.   

    谢谢你的回复,这是我的gridview的adapter的getView方法
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    holder=null;
    if(convertView==null){
    convertView=inflater.inflate(R.layout.gridview_item, null);
    holder=new Holder();
    holder.view=(ImageView) convertView.findViewById(R.id.imageView1);
    convertView.setTag(holder);
    }else{
    holder=(Holder) convertView.getTag();
    }
    String pic_url=timeLineImage.get("picUrl"+position);
    holder.view.setTag(pic_url);
    // ImageLoader.getInstance().displayImage(pic_url, holder.view, options);
    ImageLoader.getInstance().displayImage(pic_url, holder.view, options,new LoadListener());
    //setImage(holder.view,pic_url);
    return convertView;
    }
      

  3.   

    holder 不要设置为全局变量,设为局部变量吧
      

  4.   

    3楼正解,你每次调用getView花每项item的时候都是一直在修改同一个ViewHolder,ViewHolder类里面的那些控件都是指向的同一个引用。建议,在getView放法中创建ViewHolder对象
      

  5.   

    虽然楼主把viewHolder做成了全局变量,但是每次getView时都置成空了,所以应该不是这个关系,如果是之前的图片在滑动到下面后又出现了然后再变成新的图片,这个就是convertView的问题,这个convertView的原理就是把原来的View重复使用的,所以会出现之前的图片,然后被新的图片取代
      

  6.   

    是不是在子线程中有notifydatasetchanged()???
      

  7.   

    把ViewHolder設置成局部變量即可。如你代碼,在getView方法中你每次加載一個Item的時候都會修改同一個ViewHolder,這樣會導致顯示混亂。