2017-02-04 159 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,這意味着正在使用先前實例視圖其中有舊的位置

相關問題