galleryのgetviewでpositionが0のときに2回問題を呼び出す

3298 ワード

回転: http://www.maxiaoguo.com/shipin/349.html
プロジェクトで問題が発生し、galleryのあるactivityに入るとgalleryの最初の画像がロードされません. スライドした後、または再び入ってから表示されます.
 なぜなら、初めて入ったときにgetviewが1回呼び出され、その後また自動的に呼び出されたので、   つまり一度入ったactivity positionが0のときに2回呼び出されました.
初めて view初期化後にリクエストデータを開始し、2回目の場合 初期化後もデータを要求し、2回目の初期化のviewもposition=0の位置に置かれていましたが、プロジェクトに重複コミット要求防止の判断が書かれていたので、2回目のリクエストデータが失敗したため、表示されませんでした...坑お父さん...
解決策
一、 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();
	}

	

}