1

我正在使用带有大量图像的stickyheaders gridview,并且标题是文本。在任何给定时间,我的屏幕上都有 10 到 20 张图像。我正在使用视图模式来重用单元格。

然而,很多时候细胞没有被重复使用——为什么?此外,每个单元格被调用两次 - 为什么?

@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;
}

这就是日志输出的样子:

在此处输入图像描述

4

1 回答 1

0

GridView使用视图recycler继续在当前视口下方或上方添加回收视图,并在滚动时recyclable pool移动活动视图到 a。off-screencode这样 GridView 只需要enough views in memory在布局中填充其分配的空间和一些额外的可回收视图 - 即使您的适配器有数百个项目。它将以不同的方式填充空间 - 从顶部,从底部等 - 取决于视口的方式。下图直观地总结了向下平移 GridView 时发生的情况。

在此处输入图像描述

如果没有 View 可供重用,Android 会将 null 传递给 convertView 参数。

于 2013-09-24T08:44:20.777 回答