2 qq 21005289 qq_21005289 于 2016.01.16 17:36 提问

gridview加载图片会乱而且重复

我用gridview加载tomcat服务器上的图片,但是显示出来后会乱而且重复,滑动后图片又变成其他的了,我查了下是position的问题,但是实在不知道该怎么去修改

4个回答

lxk_1993
lxk_1993   Rxr 2016.01.16 17:46

贴代码看看 看下你的 adapter 和 点击事件

qq_21005289
qq_21005289 我贴上去了 你帮我看看
2 年多之前 回复
qq_21005289
qq_21005289   2016.01.16 18:44

public class HeroAdapter extends CommonBaseAdapter {
String url = "http://192.168.1.108:8080/heroServer/PictureServlet?iconName=";
public static List heros = new ArrayList();
private ViewHolder viewHolder = null;
private HashMap viewMap = new HashMap();

public HeroAdapter(Context context, List<HeroInfo> heros) {
    super(context, heros);
    this.heros = heros;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    if (!viewMap.containsKey(position) || viewMap.get(position) == null) {
        convertView = LayoutInflater.from(context).inflate(
                R.layout.gridview_item, parent, false);
        viewHolder = new ViewHolder();

        viewHolder.ivIcon = (ImageView) convertView
                .findViewById(R.id.hero_icon);
        viewHolder.tvTitle = (TextView) convertView
                .findViewById(R.id.hero_title);
        viewHolder.tvName = (TextView) convertView
                .findViewById(R.id.hero_name);
        convertView.setTag(viewHolder);
        viewMap.put(position, convertView);
    } else {
        convertView = viewMap.get(position);
        viewHolder = (ViewHolder) convertView.getTag();
    }
    viewHolder.tvTitle.setText(heros.get(position).gethTitle());
    viewHolder.tvName.setText(heros.get(position).getName());
    System.out.println(position);

    new AsyncTask<String, Void, Bitmap>() {
        @Override
        protected Bitmap doInBackground(String... params) {
            HttpURLConnection conn = null;
            try {
                String uri = params[0] + heros.get(position).gethPicture();
                URL url = new URL(uri);
                conn = (HttpURLConnection) url.openConnection();
                conn.setReadTimeout(5000);
                conn.setRequestMethod("GET");
                if (conn.getResponseCode() == HttpStatus.SC_OK) {
                    Bitmap bitmap = BitmapFactory.decodeStream(conn
                            .getInputStream());
                    return bitmap;
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                conn.disconnect();
            }
            return null;
        }

        protected void onPostExecute(Bitmap result) {

            viewHolder.ivIcon.setImageBitmap(result);
        }
    }.execute(url);
    return convertView;
}

class ViewHolder {
    ImageView ivIcon;// 图标
    TextView tvTitle;// 英雄称号
    TextView tvName;// 英雄名字

}

}

qq_21005289
qq_21005289   2016.01.16 18:44

public class HeroAdapter extends CommonBaseAdapter {
String url = "http://192.168.1.108:8080/heroServer/PictureServlet?iconName=";
public static List heros = new ArrayList();
private ViewHolder viewHolder = null;
private HashMap viewMap = new HashMap();

public HeroAdapter(Context context, List<HeroInfo> heros) {
    super(context, heros);
    this.heros = heros;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    if (!viewMap.containsKey(position) || viewMap.get(position) == null) {
        convertView = LayoutInflater.from(context).inflate(
                R.layout.gridview_item, parent, false);
        viewHolder = new ViewHolder();

        viewHolder.ivIcon = (ImageView) convertView
                .findViewById(R.id.hero_icon);
        viewHolder.tvTitle = (TextView) convertView
                .findViewById(R.id.hero_title);
        viewHolder.tvName = (TextView) convertView
                .findViewById(R.id.hero_name);
        convertView.setTag(viewHolder);
        viewMap.put(position, convertView);
    } else {
        convertView = viewMap.get(position);
        viewHolder = (ViewHolder) convertView.getTag();
    }
    viewHolder.tvTitle.setText(heros.get(position).gethTitle());
    viewHolder.tvName.setText(heros.get(position).getName());
    System.out.println(position);

    new AsyncTask<String, Void, Bitmap>() {
        @Override
        protected Bitmap doInBackground(String... params) {
            HttpURLConnection conn = null;
            try {
                String uri = params[0] + heros.get(position).gethPicture();
                URL url = new URL(uri);
                conn = (HttpURLConnection) url.openConnection();
                conn.setReadTimeout(5000);
                conn.setRequestMethod("GET");
                if (conn.getResponseCode() == HttpStatus.SC_OK) {
                    Bitmap bitmap = BitmapFactory.decodeStream(conn
                            .getInputStream());
                    return bitmap;
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                conn.disconnect();
            }
            return null;
        }

        protected void onPostExecute(Bitmap result) {

            viewHolder.ivIcon.setImageBitmap(result);
        }
    }.execute(url);
    return convertView;
}

class ViewHolder {
    ImageView ivIcon;// 图标
    TextView tvTitle;// 英雄称号
    TextView tvName;// 英雄名字

}

}

qq_21005289
qq_21005289   2016.01.16 18:45

public class HeroAdapter extends CommonBaseAdapter {
String url = "http://192.168.1.108:8080/heroServer/PictureServlet?iconName=";
public static List heros = new ArrayList();
private ViewHolder viewHolder = null;
private HashMap viewMap = new HashMap();

public HeroAdapter(Context context, List<HeroInfo> heros) {
    super(context, heros);
    this.heros = heros;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    if (!viewMap.containsKey(position) || viewMap.get(position) == null) {
        convertView = LayoutInflater.from(context).inflate(
                R.layout.gridview_item, parent, false);
        viewHolder = new ViewHolder();

        viewHolder.ivIcon = (ImageView) convertView
                .findViewById(R.id.hero_icon);
        viewHolder.tvTitle = (TextView) convertView
                .findViewById(R.id.hero_title);
        viewHolder.tvName = (TextView) convertView
                .findViewById(R.id.hero_name);
        convertView.setTag(viewHolder);
        viewMap.put(position, convertView);
    } else {
        convertView = viewMap.get(position);
        viewHolder = (ViewHolder) convertView.getTag();
    }
    viewHolder.tvTitle.setText(heros.get(position).gethTitle());
    viewHolder.tvName.setText(heros.get(position).getName());
    System.out.println(position);

    new AsyncTask<String, Void, Bitmap>() {
        @Override
        protected Bitmap doInBackground(String... params) {
            HttpURLConnection conn = null;
            try {
                String uri = params[0] + heros.get(position).gethPicture();
                URL url = new URL(uri);
                conn = (HttpURLConnection) url.openConnection();
                conn.setReadTimeout(5000);
                conn.setRequestMethod("GET");
                if (conn.getResponseCode() == HttpStatus.SC_OK) {
                    Bitmap bitmap = BitmapFactory.decodeStream(conn
                            .getInputStream());
                    return bitmap;
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                conn.disconnect();
            }
            return null;
        }

        protected void onPostExecute(Bitmap result) {

            viewHolder.ivIcon.setImageBitmap(result);
        }
    }.execute(url);
    return convertView;
}

class ViewHolder {
    ImageView ivIcon;// 图标
    TextView tvTitle;// 英雄称号
    TextView tvName;// 英雄名字

}

}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
GridView图片加载重复的正确解决方法
GridView图片加载重复的正确解决方法: public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null || convertView.getTag() != null) 在一般对于convertView判空时再加上对convertView.getTag(
关于GridView加载和滑动时造成的图片混乱问题总结
最近项目遇到一个BUG,就是
用ImageLoader给gridview加载图片错乱问题
给imageLoader设置option 简单粘贴代码,供自己回忆 在adapter的构造方法中初始化option public BillboardtAdapter() { mDisplayImageOptions = new DisplayImageOptions.Builder() .showStubImage(R.mipmap.img_default
傻傻的开心,呵呵 gridview布局 ,convertView加载,图片出现重叠现象 ,已解决!!(针对个人问题,仅可参考哟)
问题:本人需在主界面获取所有app,获取后没发现什么问题,但是导入多个app后,才发现问题:点击某app,按下去,显示的却是另一个app的图标,而不是该app的图标。 对于菜鸟的我,瞬间不好了。于是博客别人各种方法,但是比较一下,没什么问题啊,把别人的方法一次又一次的借用了下还是不行,这下不开心了。
GridView添加显示图片导致的view复用问题
最近在做一个功能:主页面添加图片,用GridView去显示图片。我刚开始是这么做的:添加完图片后,执行notifyDataSetChanged().按理说可以达到我们想要的效果去更新数据。但是却因为getView的view复用问题导致了图片重复,错乱问题。但是如果不用图片复用的话,那么势必会增加很多内存或开销去显示那么多的图片。所以我们还是得需要view复用,减少加载view,减少内存。 解决方
Android ListView,GridView,RecyclerView图片加载错位闪动问题解决办法
问题的根源还是控件的复用以及异步加载所引起的问题 解决思路: 1.使用缓存,从缓存中加载的速度大大少于从网络加载 2.设置默认图片,当一个item设置个图片然后被复用,而当前显示的图片还没有数据,正在从网络获取,这个时候此item就会显示复用前显示的图片,而当前应该显示的图片从网络中获取到之后就会重新加载上去就出现的图片闪动的情况 3.给ImageView设置TAG我封装了一个类来进行网络获
完美解决ListView加载网络图片乱跳问题
先说一下为什么会出现图片乱跳。 使用convertView对ListView的每个item优化,item的复用可以有效降低内存的占用,使ListView滑动更为流畅。但会带来一个问题,当最顶部的item滑出屏幕时,会变成下一个从底部将要滑进来的item。每次滑进来的item都要去请求网络获得图片。 第一个item滑出去时,是带着图片的。其ImageView指向了一块内存。当其慢慢滑出,
ListView、GridView滑动时禁止加载图片
friendContactListView.setOnScrollListener(new PauseOnScrollListener(ImageLoader.getInstance(), true, true)); com.nostra13.universalimageloader.core.listener.PauseOnScrollListener.PauseOnScrollLis
Android完美解决GridView异步加载图片和加载大量图片时出现OOM
文章摘自安卓巴士http://www.apkbus.com/android-85388-1-1.html;感觉写的很强大,也能学到bitmap.recycle()方法的使用,拷来做笔记。 众所周知,我们在使用GridView或者ListView时,通常会遇到两个棘手的问题: 1.每个Item获取的数据所用的时间太长会导致程序长时间黑屏,更甚会导致程序ANR,也就是Application
Android关于GridView加载图片的简单使用(使用Glide不卡顿)
安卓开发中,对于图片的处理是非常常见的,这里简单介绍gridview加载图片时所使用的的一些技巧。 一、众所周知,加载图片时会消耗很大的内存空间,这里我们使用谷歌推荐的一个库,用于处理图片的加载(官方说明:Glide是一个非常成熟的图片加载库,他可以从多个源加载图片,如:网路,本地,Uri等,更重要的是他内部封装了非常好的缓存机制并且在处理图片的时候能保持一个低的内存消耗。),此外,glide依赖