我有ExpandableListView
正常填充行的字段。但是,其中一个字段是ImageView
,其中图像的路径存储在变量中。问题是扩展/折叠和scolling列表视图很慢。展开/折叠大约需要一秒钟。这是正常的吗?有没有办法让它更快?下面的代码是ImageView
代码,我怀疑它是性能背后的原因(我评论它并且速度可以接受)
请让我知道可以做些什么。
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();
}
}
请注意,变量prop是从数据库获得的,imagePath
作为字符串存储在DB中。数据库查询甚至在初始化列表之前发生,因此它不会影响性能。
答案 0 :(得分:1)
由于getView()
,我假设此代码块位于适配器的holder.main...
方法内。如果是这样,这是一种可怕的做法,因为您应该理解这将对ExpandableList
行中的每一行进行。在滚动和展开/折叠期间应该发出效果,因为可能会为所有这些行调用getView()
,并且这些图像被外部检索。
更好的是设置一个集合来保存这些图像,然后一次批量插入它们。然后,您可以使用此图像集来填充可扩展列表。如果还没有,还要考虑使用convertView
技术。