首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android BaseAdapter getView

Android BaseAdapter getView
EN

Stack Overflow用户
提问于 2017-02-04 09:56:34
回答 2查看 226关注 0票数 0

我找到了关于开发者android的GridView指南:https://developer.android.com/guide/topics/ui/layout/gridview.html

代码语言:javascript
复制
// 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,而不是只在convertView为null时才调用它?如果它不是null,不应该convertView已经设置了图像资源集,比如填充、缩放设置等等。

代码语言:javascript
复制
// 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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-04 10:21:03

重复检查文档中的这句话

getView()此方法为添加到ImageAdapter的每个图像创建一个新视图。当调用它时,将传入一个View,它通常是一个可回收的对象(至少在此对象被调用一次之后)。

因此,如果系统回收一个视图,它就会循环它们所在的状态。因此,如果图像在离开屏幕时被设置为ImageView,那么当系统重新使用它( convertView)时,它就会出现,因此必须显式地重新初始化它。虽然padding不会影响scale,因为以前所有的imageview都是一样的,但是每次都需要设置ImageResource。

票数 1
EN

Stack Overflow用户

发布于 2017-02-04 10:10:56

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42038958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档