项目中使用了gallery,并自定义了adapter用来多线程加载网络图片,但是在使用过程中发现点击进入gallery界面后,第一张图片下载了两次。通过日志发现,是因为在position为0的位置上两次调用了了adapter的getView函数。
对此,百度得到的解释是“第一次Gallery调用Adapter的getView的时候不知道加载多少个View才能填充满Gallery的宽度,所以,第一次调用是测试性的获取一个View,来measure 宽度,而不会用来显示,也不会用来缓存,暂时称为伪调用。而第二次调用,才是获得要真正显示的View”
那么,如何解决该问题呢。目前,百度上还没有漂亮的解决方案---即无法通过修改api的调用或者通过android自带的功能、函数来解决。那么只能是自己想野路子了。那就是自己判断Gallery是否是第一次调用Adapter的getView。
if(first){//由于position=0时会调用两次getView因此对第一次调用时进行特殊操作避免重复读取图片
convertView = LayoutInflater.from(context).inflate(R.layout.item,null); //实例化convertView
Gallery.LayoutParams params = new Gallery.LayoutParams(Gallery.LayoutParams.FILL_PARENT,Gallery.LayoutParams.FILL_PARENT);
convertView.setLayoutParams(params);
convertView.setTag(null);
first=false;
return convertView;
}
上述代码,在第一次调用getView时,并不实质性的读取图片,而是做了特殊的"空"处理。这样,就避免了多次加载第一张图片的问题。