2011-10-05 190 views
0

我試圖回收gridview項目,因爲目前的解決方案工作,但是laggy和吃掉資源。但是,我無法弄清楚如何。 Android開發者網站的例子並不適合我。Gridview滾動 - 回收視圖

我getview()方法:

public View getView(int position, View paramView, ViewGroup paramViewGroup) { 
    long starttime = System.currentTimeMillis(); 

View localView = MMWeb.this.getLayoutInflater().inflate(R.layout.grid_item, null); 
TextView localTextView = (TextView)localView.findViewById(2131034115); 
ImageView localImageView = (ImageView)localView.findViewById(2131034114); 

cItem = items.get(position); 
cItem.add(Integer.toString(position)); 
localTextView.setText(getItemName()); 
Bitmap localBitmap = d.getImage(cItem.get(3), cItem.get(2)); 
localImageView.setImageBitmap(localBitmap); 
Common.toLog("getView took "+ (System.currentTimeMillis() - starttime) + " ms"); 
return localView; } 

有人能指出我在正確的方向?任何建議如何解決這個將不勝感激!

+0

值得看的[在UI性能谷歌IO視頻](http://www.youtube.com/watch?v=N6YdwzAvwOA) – Merlin

+0

@Merlin林看着那現在...但不能獲得viewholder工作(如果我把視圖持有人類正確後,getView()我得到了一個「令牌語法錯誤類」,無效類型「錯誤 - 編輯:nooby錯誤:我寫了」ViewHolder()「,而不是」ViewHolder「 –

回答

0

只需使用paramView,這是adapterview傳遞的可重用視圖,因爲它在屏幕上不再可見。

if (paramView == null) { 
    // inflate a new view into paramView. 
    paramView = MMWeb.this.getLayoutInflater().inflate(R.layout.grid_item, null); 
} 
// fill the paramView 
TextView localTextView = (TextView)paramView .findViewById(2131034115); 
ImageView localImageView = (ImageView)paramView .findViewById(2131034114); 

cItem = items.get(position); 
cItem.add(Integer.toString(position)); 
localTextView.setText(getItemName()); 
Bitmap localBitmap = d.getImage(cItem.get(3), cItem.get(2)); 
localImageView.setImageBitmap(localBitmap); 

return paramView; 
+0

這樣做的伎倆......但是這又引發了另一個問題(當我第一次開始使用gridview時,我首先刪除了回收站的原因) 當我滾動時,項目跳轉隨機地被重新排序。那麼? –

+0

在分配if語句之外的項目之後問題解決了。 –