Android网格视图不维护元素顺序(除非牺牲性能)



在我的应用程序中,我有一个库,一个包含图像视图的网格视图。代码如下:

public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) {  
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(LAYOUT_WIDTH, LAYOUT_HEIGHT));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(8, 8, 8, 8);
        } else {
            imageView = (ImageView) convertView;
        }
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inSampleSize = 5;
        Bitmap previewBitmap = Bitmap.createScaledBitmap(
                        BitmapFactory.decodeFile(picture_paths[position], o), 
                        LAYOUT_WIDTH, 
                        LAYOUT_HEIGHT, 
                        false);
        imageView.setImageBitmap(previewBitmap);
        return imageView;
    }

当然,它的性能非常糟糕,因为每次绘制元素时都必须调整大小并加载位图。但是,如果我在if(convertView==null)块中移动调整大小的代码,则元素的顺序不会保持不变——随着用户在网格视图中滚动,每个图像的位置都会不断变化。

在不出现性能问题的情况下,正确的方法是什么?

每次获得非null的convertView时,都需要重新绑定数据。这意味着您需要在其他地方(在适配器、位图缓存等中)保留对缩放位图的引用

最新更新