我找到了关于开发者android的GridView指南: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,而不是只在convertView为null时才调用它?如果它不是null,不应该convertView已经设置了图像资源集,比如填充、缩放设置等等。
// 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;
}发布于 2017-02-04 10:21:03
重复检查文档中的这句话
getView()此方法为添加到ImageAdapter的每个图像创建一个新视图。当调用它时,将传入一个View,它通常是一个可回收的对象(至少在此对象被调用一次之后)。
因此,如果系统回收一个视图,它就会循环它们所在的状态。因此,如果图像在离开屏幕时被设置为ImageView,那么当系统重新使用它( convertView)时,它就会出现,因此必须显式地重新初始化它。虽然padding不会影响scale,因为以前所有的imageview都是一样的,但是每次都需要设置ImageResource。
发布于 2017-02-04 10:10:56
对于每个位置,图像资源是不同的,这就是为什么我们需要调用setImageResource
如果convertView != null,这意味着正在使用以前的实例视图,该视图具有旧位置的图像资源
https://stackoverflow.com/questions/42038958
复制相似问题