2012-10-30 50 views
1

我一直在關注如何優化這樣一個列表作爲一個畫廊的教程,例如,但我不能讓我的適配器重新循環的意見。 這裏是我的代碼:適配器不斷instanciating AdapterView

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    Log.d("ImageAdapter","getView : "+convertView); 
    ImageView imageView = null; 

    if (convertView == null){ 
     //imageView = (ImageView) mInflater.inflate(R.layout.pic_adapter, null); 
     imageView = new ImageView(context); 


     holder = new ViewHolder(); 
     holder.imageView = imageView; 

     imageView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
     //imageView = holder.imageView; 
    } 

    holder.imageView.setImageDrawable(plotsImages.get(position)); 
    Log.d("ImageAdapter","return : "+imageView); 
    return imageView; 
} 

在我的日誌我得到「空」在getView的開始,這意味着convertView是不是有些重循環看,怎麼是,所有的時間?

感謝您的幫助!

+0

滾動後你還看到'「getView:null」'嗎?此外,您不需要用於當前佈局的ViewHolder。 – Sam

+1

你有足夠的意見來填補屏幕+?只有當你有足夠的空間時才能回收它們(因此可以重新使用)。 – Barak

+0

什麼是AdapterView? – njzk2

回答

1

我相信你在ViewHolder中使用的循環邏輯是罪魁禍首。當我試圖運行你的代碼時,這個應用程序崩潰,出現一個模糊的錯誤。然而,這工作得很好:

public View getView(int position, View convertView, ViewGroup parent) { 
    Log.d("ImageAdapter","getView : "+convertView); 
    ImageView imageView = null; 

    if (convertView == null){ 
     //imageView = (ImageView) mInflater.inflate(R.layout.pic_adapter, null); 
     imageView = new ImageView(Example.this); 
    } else { 
     imageView = (ImageView) convertView; 
    } 

    imageView.setImageDrawable(plotsImages.get(position)); 
    Log.d("ImageAdapter","return : "+imageView); 
    return imageView; 
} 

ViewHolders應該救你脫離使用findViewById()反覆訪問該行佈局子視圖。由於您的佈局只是一個ImageView,因此不需要ViewHolder。

+0

我剛剛嘗試過這一點,並在第一個日誌中保持爲空:/ –

+0

當我instanciate ImageView我使用在適配器構造函數中給出的上下文,是否正確? \t'public ImageAdapter(Activity context,List plotsImages){ \t \t Log.d(「ImageAdapter」,「CTOR」); \t \t this.context = context; \t \t this.plotsImages = plotsImages; \t \t mInflater = context.getLayoutInflater(); \t}' –

0

首先擺脫持有者,你在convertView中得到的是你從getView()返回的東西。這就是你期望的代碼,那麼爲什麼這種不必要的複雜性呢?

你在使用什麼適配器類?你可以嘗試使用BaseAdapter並確保所有重寫的方法都返回適當的數據嗎?

我在想getItemViewType,如果每次返回一個不同的值,回收將被禁用。

相關問題