当前位置: 首页 > 知识库问答 >
问题:

AndroidBaseAdapter getView

董俊
2023-03-14

我在开发者android上找到了GridView guide:https://developer . Android . com/guide/topics/ui/layout/GridView . html

// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView;
    if (convertView == null) {
        // if it's not recycled, initialize some attributes
        imageView = new ImageView(mContext);
        imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(8, 8, 8, 8);
    } else {
        imageView = (ImageView) convertView;
    }

    imageView.setImageResource(mThumbIds[position]);
    return imageView;
}

"在getView()方法的末尾,传递给该方法的位置整数用于从mThumbIds数组中选择图像,该数组被设置为ImageView的图像资源。"

我对此感到困惑。

为什么我们每次都需要调用setImageResource,而不是仅在转换视图为null时才调用它?如果它不为null,就不应该转换视图已经设置了图像资源,比如填充、缩放设置等。

// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView;
    if (convertView == null) {
        // if it's not recycled, initialize some attributes
        imageView = new ImageView(mContext);
        imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(8, 8, 8, 8);
        imageView.setImageResource(mThumbIds[position]);
    } else {
        imageView = (ImageView) convertView;
    }
    return imageView;
}

共有2个答案

葛玉堂
2023-03-14

对于每个位置,图像资源是不同的,这就是为什么我们需要调用setImageResource

如果转换视图!=null,这意味着正在使用具有旧位置图像资源的先前实例视图

桂高昂
2023-03-14

仔细检查文档中的这句话:

< code>getView()此方法为添加到ImageAdapter的每个图像创建一个新视图。调用这个函数时,会传入一个视图,它通常是一个回收的对象(至少在调用过一次之后)。

因此,如果系统回收一个视图,它将像它们原来的状态一样回收。因此,如果图像在离开屏幕时设置为ImageView,那么当系统重新使用它(convertView)时,它就会出现,因此必须显式重新初始化。尽管padding缩放s都是相同的,但每次都需要设置ImageResource。

 类似资料:

相关问答

相关文章

相关阅读