我在开发者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;
}
对于每个位置,图像资源是不同的,这就是为什么我们需要调用setImageResource
如果转换视图!=null,这意味着正在使用具有旧位置图像资源的先前实例视图
仔细检查文档中的这句话:
< code>getView()此方法为添加到ImageAdapter的每个图像创建一个新视图。调用这个函数时,会传入一个视图,它通常是一个回收的对象(至少在调用过一次之后)。
因此,如果系统回收一个视图,它将像它们原来的状态一样回收。因此,如果图像在离开屏幕时设置为ImageView
,那么当系统重新使用它(convertView
)时,它就会出现,因此必须显式重新初始化。尽管padding
,缩放s都是相同的,但每次都需要设置ImageResource。