
我有一个包含几个列表视图的应用程序.列表视图包含由图像视图和文本视图组成的项目.
所有图像都在服务器上缩放大小,用于加载它们的模式如下所示:
>实例化DrawableManager
>在getVIEw()方法中,我执行以下 *** 作:
>将拇指uri和ImageVIEw实例传递给DrawableManagers getimageAsync方法
>如果图像存在,该方法将首先查看SD卡,如果是这样,从SD卡加载并保存软参考更新imagevIEw drawable
>如果不存在于SD.从http获取并保存在SD(如果有足够的空间)上作为softreference并更新imagevIEw drawable.
当图像存在于SD卡上时,一切正常.但第一次(或使用没有SD卡的应用程序时)图像似乎在滚动时填充到错误的列表视图行中.当我停止滚动时,问题会在几秒钟后自行修复.
它几乎就像是ImageVIEw引用是汇集的还是其他东西.
有任何想法吗?
我还包括getVIEw方法:
public VIEw getVIEw(int position, VIEw convertVIEw, VIEwGroup parent) { VIEwHolder vh; if (convertVIEw == null) { convertVIEw = inflater.inflate(R.layout.informationrow, null); vh = new VIEwHolder(); vh.imageVIEw = (ImageVIEw) convertVIEw.findVIEwByID(R.ID.rowinformationIcon); vh.textVIEw = (TextVIEw) convertVIEw.findVIEwByID(R.ID.rowinformationTitleline); convertVIEw.setTag(vh); } else { vh = (VIEwHolder) convertVIEw.getTag(); } Customcategory cc = items.get(position); if (cc != null) { vh.textVIEw.setText(cc.get_name()); if (cc.getMediaUrl() != null) { _drawMgr.fetchDrawableOnThread(cc.getMediaUrl(), vh.imageVIEw); vh.imageVIEw.setBackgroundDrawable(getResources().getDrawable(R.drawable.imageframe)); } else { vh.imageVIEw.setimageDrawable(getResources().getDrawable(R.drawable.trans4040)); vh.imageVIEw.setBackgroundDrawable(null); } } return convertVIEw;}解决方法:
这是ListVIEw使用的VIEw回收……
传递给getVIEw()的convertVIEw参数可以引用已滚动显示列表的显示部分的现有项目,并且可以重复使用以显示正在显示的项目.
所以,是的,相同的ImageVIEw将在您发布的代码中的多次下载中重复使用.在你的getVIEw()中你应该检查下载是否已经挂起并在不再需要时取消它(或者让它在某处完成到FIFO图像缓存,但是不要触摸现在最近需要的ImageVIEw-开始下载).
(一个替代的,懒惰的开发人员实现,假设无限的内存将忽略convertVIEw参数并在每次调用时实例化新的informationrow视图.不要那样做.:)).
总结以上是内存溢出为你收集整理的Android列表视图图片加载问题全部内容,希望文章能够帮你解决Android列表视图图片加载问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)