2013-09-24 10 views
1

我使用的stickyheaders gridview有很多圖像,並且標題是文本。在任何時候,我在屏幕上都有10到20張圖像。我正在使用視圖模式重用單元格。爲什麼gridview單元格不能被重用?

然而,很多時候細胞沒有被重用 - 爲什麼?此外,每個細胞都被召喚兩次 - 爲什麼?

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 

    Photo photo = getItem(position); 
    ViewHolder viewHolder = null; 
    if (convertView == null) { 
     Log.d(TAG, "convertview is null :"+position); 
     convertView = mInflater.inflate(R.layout.item_photo_grid, parent, false); 
     viewHolder = new ViewHolder(); 
     viewHolder.imageView = (ImageView) convertView.findViewById(R.id.photo); 
     viewHolder.selected = convertView.findViewById(R.id.selected); 
     convertView.setTag(viewHolder); 
    } 
    else { 
     Log.d(TAG, "convertview is resused :"+position); 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 
    frameLoader.pauseOnFling(isFlinging); 
    frameLoader.pauseOnScroll(isScrolling); 
    frameLoader.setMaxItems(getVisiblePhotoCount()); 
    frameLoader.displaySmallImage(photo, viewHolder.imageView); 
    if (mSelectedItems.contains(photo)) { 
     viewHolder.selected.setVisibility(View.VISIBLE); 
    } 
    else { 
     viewHolder.selected.setVisibility(View.GONE); 
    } 

    return convertView; 
} 

這是logoutput的樣子:

Enter image description here

+1

你的屏幕有多大,你有多少個網格單元? nr或列x行數?請注意,android可能會準備在即將使用之前顯示的少量網格單元。 – gunar

+0

什麼是'frameLoader',它在幹什麼? – gunar

+0

懶洋洋地加載圖片 - 它不會改變convertview,只有裏面的圖片 –

回答

0

GridView使用視圖recycler不斷添加以下或當前視上述回收觀點和移動主動觀看到recyclable pool,因爲他們滾動時移動off-screencode。通過這種方式,GridView只需要保持enough views in memory即可在佈局和一些額外的可回收視圖中填充其分配的空間 - 即使您的適配器有數百個項目。它將以不同的方式填充空間 - 從頂部到底部等 - 取決於視口的方式。下面的圖片直觀地總結了當您平移GridView時發生的情況。

enter image description here

如果沒有查看供重複使用,Android將null傳遞給convertView參數。

相關問題