现在的位置: 首页 > 综合 > 正文

gallery 中的getview 中 当position是0的时候 调用两次问题

2013年11月28日 ⁄ 综合 ⁄ 共 2609字 ⁄ 字号 评论关闭

在项目中遇到了一个问题,当你进入有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();
	}

	

}

抱歉!评论已关闭.