2013-02-17 103 views
0

我有一個ExpandableListView它填充的行的字段爲正常。但是,其中一個字段是ImageView,其中映像的路徑存儲在變量中。問題在於擴展/摺疊和滾動列表視圖很慢。展開/摺疊大約需要一秒鐘。這是正常的嗎?有沒有辦法讓它更快?下面的代碼是ImageView代碼,我懷疑它是性能(我評論它,速度是可以接受的)爲什麼展開/摺疊和滾動ExpandableListView速度慢?

請讓我知道什麼可以做背後的原因。

String imagePath = prop.getImagePath(); 
if (imagePath.length() > 0) { 
    Uri mainImgeUri = Uri.parse(imagePath); 
    InputStream imageStream; 
    try { 
     imageStream = mActiviy.getContentResolver().openInputStream(mainImgeUri); 
     BitmapFactory.Options options = new BitmapFactory.Options(); 
     options.inSampleSize = 8; 
     Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream, null, options); 
     holder.mainImage.setImageBitmap(yourSelectedImage); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
} 

請注意,是從imagePath存儲爲DB串數據庫中獲取的變量道具。數據庫查詢甚至在初始化列表之前發生,因此它不會影響性能。

回答

1

我假設這個代碼塊在您的適配器的getView()方法中,由於holder.main...。如果是這樣,這是一個可怕的做法,因爲你應該明白,這是要進行到ExpandableList行,每行一個。效果應該在滾動過程中明顯和擴大/摺疊,因爲getView()可能會被稱爲對於所有這些行,並正在extraneously檢索這些圖像。

好多是建立一個集合持有這些圖像,然後批量一次一次插入。然後,您可以使用此圖像集合來填充可展開列表。如果還沒有,也可以考慮使用convertView技術。

+0

哦~~我看。是的,我在getView中使用它,就像你猜測的那樣。我喜歡你的收藏方法。因此,從路徑的位圖轉換爲外部完成並存儲在收集,但holder.mainImage.setImageBitmap(yourSelectedImage)仍然在getview做,對不對? – Snake 2013-02-17 19:07:20

+0

是的,就是這樣。 – mango 2013-02-18 09:37:23