2012-07-27 115 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; 
}