转: http://www.maxiaoguo.com/shipin/349.html
在项目中遇到了一个问题,当你进入有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();
}
}