2012-07-27 176 views
2

我有一个列表包含图像,每次用户点击图像,然后在网格视图中图像将显示在网格视图上,这部分我已经完成,它的工作。 问题是当用户开始向上/向下滚动时,网格上的所有以前的图像开始显示在不同的地方。我想我有我的适配器网格视图滚动问题

public class GridAdapter extends BaseAdapter{ 

Context mContext; 
public GridAdapter(Context con){ 
    mContext = con; 
} 

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

@Override 
public Object getItem(int arg0) { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public long getItemId(int position) { 
    // TODO Auto-generated method stub 
    return position; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup arg2) { 

    if(convertView==null){ 
     LayoutInflater vi = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = vi.inflate(R.layout.grid_image, null); 
     Holder.image =(ImageView) convertView.findViewById(R.id.obsImage); 
     // Holder.image.setImageResource(R.drawable.blank); 
    } 
     Holder.image =(ImageView) convertView.findViewById(R.id.obsImage); 
     Holder.image.setImageResource(Globals.obsImageMatrix.get(position)); 
    return convertView; 
} 



public static class Holder{ 
    public static ImageView image; 
} 

}

Globals.obsImageMatrix是一个矩阵内与getView功能的问题,即它`大小网格本身,包含网格的图像。

回答

3

您不能正确使用您的ViewHolder。试试这个:

@Override 
public View getView(final int position, View convertView, ViewGroup arg2) { 

    ViewHolder holder = null; 
    if(convertView==null){ 
     LayoutInflater vi = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = vi.inflate(R.layout.grid_image, null); 
     holder = new ViewHolder(); 
     holder.image =(ImageView) convertView.findViewById(R.id.obsImage); 
     convertView.setTag(holder); 
    }else{ 
     holder = (ViewHolder)convertView.getTag(); 
    } 

     holder.image.setImageResource(Globals.obsImageMatrix.get(position)); 
    return convertView; 
} 

public static class Holder{ 
    public ImageView image; 
} 

你必须阅读更多关于viewHolders来理解这种模式。 SO和谷歌上有很多帖子。

希望这将帮助你

+0

谢谢你的快速反应 – 2012-07-27 09:11:10

0
  1. 当你创建一个新的viewholder findViewById应该只是做。
  2. 使用这个作为你的LayoutInflater代替:

    Context mContext; 
    
    Private LayoutInflater mInflater; 
    
        public GridAdapter(Context con){ 
         mContext = con; 
         mInflater = LayoutInflater.from(con); 
    } 
    

在你getView():

@Override 
public View getView(final int position, View convertView, ViewGroup arg2) { 

    ViewHolder holder; 
    if(convertView==null){ 
     convertView = mInflater.inflate(R.layout.grid_image, null);     
     holder = new ViewHolder(); 
     holder.image =(ImageView) convertView.findViewById(R.id.obsImage); 
     convertView.setTag(holder); 
    }else{ 
     holder = (ViewHolder)convertView.getTag(); 
    } 

     holder.image.setImageResource(Globals.obsImageMatrix.get(position)); 
    return convertView; 
} 


static class Holder{ 
    ImageView image; 
}