在项目中遇到了一个问题,当你进入有gallery的activity时, gallery中的第一张图片加载不出来, 滑动之后或者重新进入之后才能显示,
原因是,第一次进入的时候,getview 调用了一次,之后又自动调用了一次, 也就是说 进一次的activity position是0的时候调用了两次。
第一次 view 初始化后开始请求数据,第二次的时候 也初始化后也请求数据,, 第二次初始化的view 也放在position==0 的位置上了,,项目中写了防止重复提交请求的判断,所以第二次请求数据失败了, 因此没显示出来。。。。。。。坑爹啊。。。
解决方法
一、 在adaper 中 初始化
private boolean first = true;
private View temp;
private int firstPosition = 0;
二、在getview 中 添加
if(first){
firstPosition = position;
}else{
if(temp!=null&&(firstPosition==position||(getTitleCount()!=0&&position%getTitleCount()==firstPosition))){
return temp;
}else{
temp = null;
}
}
放在方法的最顶端
三、
在getview中
当contentview==null 时 添加以下代码
if(first){
temp = convertView;
first = false;
}
代码片段
/** * @author mawentao * @param 游戏海报适配器 */ public class GameInfoGalleryAdapter extends BaseAdapter implements com.m4399.gamecenter.widget.TitleProvider{ private ArrayList<String> data; private LayoutInflater mInflater; private ImageLoader loader; private Context c; private int viewHeight; private boolean first = true; private View temp; private int firstPosition = 0; public GameInfoGalleryAdapter(LayoutInflater mInflater,Context context,ImageLoader loader){ this.c = context; this.loader = loader; this.mInflater = mInflater; if(data==null){ data = new ArrayList<String>(); } viewHeight = DensityUtil.dip2px(context, 180); } public void setDiscussData(ArrayList<String> data){ if(data!=null){ this.data = data; } this.notifyDataSetChanged(); } @Override public int getCount() { return Integer.MAX_VALUE; } @Override public Object getItem(int position) { return data.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if(first){ firstPosition = position; }else{ if(temp!=null&&(firstPosition==position||(getTitleCount()!=0&&position%getTitleCount()==firstPosition))){ return temp; }else{ temp = null; } } ViewHolder holder = null; if(convertView==null){ holder = new ViewHolder(); holder.imageView = new ImageView(c); holder.imageView.setScaleType(ScaleType.FIT_XY); Gallery.LayoutParams params = new Gallery.LayoutParams( Gallery.LayoutParams.WRAP_CONTENT,viewHeight); holder.imageView.setLayoutParams(params); holder.imageView.setFocusable(false); convertView = holder.imageView; convertView.setTag(holder); if(first){ temp = convertView; first = false; } }else{ holder = (ViewHolder) convertView.getTag(); } final String imageUrl = data.get(position%data.size()); ImageUtil.setViewImage(holder.imageView, imageUrl, ImageUtil.DEFAULT_IMAGE_GAME_POSTER, loader, new BitmapOptions(0,viewHeight).setSetScaleTyep(BitmapOptions.SCALE_BY_HEIGHT)); return convertView; } private class ViewHolder{ ImageView imageView; } @Override public String getTitle(int position) { return data.get(position%data.size()); } @Override public int getTitleCount() { return data.size(); } }