LongListSelector的Item里使用Image加载网络图片必须注意的问题
2014-01-03 15:55
330 查看
当一个列表的Item数很多时,为了效率与节省资源,我们不得不使用LongListSelector,它只保存了当前可见Item数的UI内存,当列表滑动时,比如Item1的位置滑动后显示的是Item10,它直接把Item1对应UI控件的DataContext从Item1直接变成tem10,也就是说UI控件依然是Item1的UI控件,避免了重新创建UI控件的资源开销。
假如ItemTemplate里用到了Image,然后将它的Source绑定到Item的ImageUrl属性,让它自动加载网络图片,这是常用做法,不会有什么问题。
但是,如果你还给这个Image注册了事件的话,比如你想注册ImageFailed事件在加载失败时显示本地的一张加载失败图片,问题就来了,你会发现各种图片错乱事件,应该加载正常的图片却显示了加载失败图片等……。原因就是列表滚动时Image的DataContext已经变化了,比如Item1的Image加载失败响应事件ImageFailed时,实际它的DataContext已经是Item10,你在事件里把Image显示加载失败图片时,实际是显示在了当前的Item10的Image上,就造成了图片错乱事件。
所以只能避免使用注册事件来显示加载失败图片,比如多放一个Image2在相同位置显示加载失败图片,在Image加载网络图片成功时显示在了Image2的前面,看起来像是Image2从加载失败图片变成了网络图片。
假如ItemTemplate里用到了Image,然后将它的Source绑定到Item的ImageUrl属性,让它自动加载网络图片,这是常用做法,不会有什么问题。
但是,如果你还给这个Image注册了事件的话,比如你想注册ImageFailed事件在加载失败时显示本地的一张加载失败图片,问题就来了,你会发现各种图片错乱事件,应该加载正常的图片却显示了加载失败图片等……。原因就是列表滚动时Image的DataContext已经变化了,比如Item1的Image加载失败响应事件ImageFailed时,实际它的DataContext已经是Item10,你在事件里把Image显示加载失败图片时,实际是显示在了当前的Item10的Image上,就造成了图片错乱事件。
所以只能避免使用注册事件来显示加载失败图片,比如多放一个Image2在相同位置显示加载失败图片,在Image加载网络图片成功时显示在了Image2的前面,看起来像是Image2从加载失败图片变成了网络图片。
相关文章推荐
- 使用自定义的item、Adapter和AsyncTask、第三方开源框架PullToRefresh联合使用实现自定义的下拉列表(从网络加载图片显示在item中的ImageView)
- 网络图片加载的第三方类:EGOImageView的使用方法及注意事项
- 使用自定义的item、Adapter和AsyncTask、第三方开源框架PullToRefresh联合使用实现自定义的下拉列表(从网络加载图片显示在item中的ImageView)
- 在android中使用ImageLoder加载网络图片时,将图片设置为ImageView的背景
- Android第三方框架universal-image-loader[图片缓存加载]及其OOM问题处理【常用】,CardView使用[给列表中项+边框]
- 使用SDWebImage加载图片问题总结
- android网络图片加载处理库Picasso和universalimageloader使用简单案例
- android加载网络上的图片-使用SmartImageView
- 解决RecyclerView中使用UIL加载网络图片,在刷新时出现闪烁问题
- 最流行加载网络图片工具的使用(universal-image-loader-1.9.2)
- 使用universalimageloader图片加载框架,正确加载却无法显示图片问题的处理
- 使用Unversial-image-loader来异步加载网络图片和本地图片(二)完结篇
- 使用universal-image-loader-1.8.6-with-sources加载网络图片
- Android 中网络图片加载(包括本地图片的加载) 框架 universal image loader 的简单使用
- android使用ImageView加载本地SdCard图片和加载网络图片
- Android - 小功能 使用ImageView加载本地SdCard图片和加载网络图片
- 使用Android-Universal-Image-Loader异步加载图片遇到的问题
- 使用ImageLoader+gallery加载图片导致图片哆嗦的问题解决办法
- android使用ImageView加载本地SdCard图片和加载网络图片
- 使用Unversial-image-loader来异步加载网络图片和本地图片(一)