2017-02-04 97 views
0

我发现的GridView导向上显影剂机器人:https://developer.android.com/guide/topics/ui/layout/gridview.html的Android BaseAdapter getView

// 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时调用它?不应该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; 
} 

回答

1

仔细检查,这句话从Doc的图像资源:

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

因此,如果系统回收视图,它将以其状态的状态进行回收。所以如果在离开屏幕时图像被设置为ImageView,那么当系统重新使用它时(convertView)它将在那里,所以它必须被显式重新初始化。尽管padding,scale不会影响,因为所有的imageview都是相同的,但ImageResource需要每次都设置。

1

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

如果convertView = NULL,这意味着正在使用先前实例视图其中有旧的位置

相关问题