2013-09-24 12 views
1

我使用的stickyheaders gridview有很多图像,并且标题是文本。在任何时候,我在屏幕上都有10到20张图像。我正在使用视图模式重用单元格。为什么gridview单元格不能被重用?

然而,很多时候细胞没有被重用 - 为什么?此外,每个细胞都被召唤两次 - 为什么?

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

    Photo photo = getItem(position); 
    ViewHolder viewHolder = null; 
    if (convertView == null) { 
     Log.d(TAG, "convertview is null :"+position); 
     convertView = mInflater.inflate(R.layout.item_photo_grid, parent, false); 
     viewHolder = new ViewHolder(); 
     viewHolder.imageView = (ImageView) convertView.findViewById(R.id.photo); 
     viewHolder.selected = convertView.findViewById(R.id.selected); 
     convertView.setTag(viewHolder); 
    } 
    else { 
     Log.d(TAG, "convertview is resused :"+position); 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 
    frameLoader.pauseOnFling(isFlinging); 
    frameLoader.pauseOnScroll(isScrolling); 
    frameLoader.setMaxItems(getVisiblePhotoCount()); 
    frameLoader.displaySmallImage(photo, viewHolder.imageView); 
    if (mSelectedItems.contains(photo)) { 
     viewHolder.selected.setVisibility(View.VISIBLE); 
    } 
    else { 
     viewHolder.selected.setVisibility(View.GONE); 
    } 

    return convertView; 
} 

这是logoutput的样子:

Enter image description here

+1

你的屏幕有多大,你有多少个网格单元? nr或列x行数?请注意,android可能会准备在即将使用之前显示的少量网格单元。 – gunar

+0

什么是'frameLoader',它在干什么? – gunar

+0

懒洋洋地加载图片 - 它不会改变convertview,只有里面的图片 –

回答

0

GridView使用视图recycler不断添加以下或当前视上述回收观点和移动主动观看到recyclable pool,因为他们滚动时移动off-screencode。通过这种方式,GridView只需要保持enough views in memory即可在布局和一些额外的可回收视图中填充其分配的空间 - 即使您的适配器有数百个项目。它将以不同的方式填充空间 - 从顶部到底部等 - 取决于视口的方式。下面的图片直观地总结了当您平移GridView时发生的情况。

enter image description here

如果没有查看供重复使用,Android将null传递给convertView参数。

相关问题