在GridView的图片被替换上滚动 [英] Images in gridview get replaced on scrolling

查看:142
本文介绍了在GridView的图片被替换上滚动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有codeD在GridView控件来显示一些图片。这些图像都可以从显示的URL。
我面临的问题是,当我滚动的图像被替换..和图像的顺序不断改变一旦开始..这将导致全面的图像的显示延迟,如果我在网格中的任何图像上单击..
请帮助!

code:

 公共类ImageAdapter延伸BaseAdapter {    私人语境mContext;
    私人TextView的txtUrl;
    私人字符串响应;
    公共ImageView的ImageView的;
    公共静态的String [] mThumbIds;
    公共ImageAdapter(上下文C,串RESP){
        mContext = C;
        响应= resp.trim();
        mThumbIds = resp.split(,);
    }    公众诠释的getCount(){
        返回mThumbIds.length;
    }    公共对象的getItem(INT位置){
        返回null;
    }    众长getItemId(INT位置){
        返回0;
    }    //创建由适配器引用的每个项目的新的ImageView
    公共查看getView(INT位置,查看convertView,父母的ViewGroup){        如果(convertView == NULL){//如果它没有回收,初始化一些属性
            ImageView的=新ImageView的(mContext);
            imageView.setLayoutParams(新GridView.LayoutParams(95,95));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(6,6,6,6);
        }其他{
            ImageView的=(ImageView的)convertView;
        }
        尝试{
             新LoadImageGrid(ImageView的).execute(mThumbIds [位置]);        }赶上(例外五){
            txtUrl.setText(错误:异常);
        }        返回ImageView的;    }类LoadImageGrid扩展的AsyncTask<弦乐,太虚,可绘制>
{    ImageView的ImageView的;
    公共LoadImageGrid(ImageView的IM){
        ImageView的IM =;
    }
    @覆盖
    保护可绘制doInBackground(字符串参数... args){
        字符串URL = ARGS [0];
        可绘制D = NULL;
        尝试{
            D = Drawable.createFromStream((InputStream的)新的URL(网址).getContent(),SRC);
        }赶上(MalformedURLException的E){
            // TODO自动生成catch块
            e.printStackTrace();
        }赶上(IOException异常五){
            // TODO自动生成catch块
            e.printStackTrace();
        }
        返回D组;    }
    @覆盖
    保护无效onPostExecute(可绘制D){
        imageView.setImageDrawable(四);
    }


解决方案

在滚动不可见的回报getView()作为convertView参数网格视图,图像视图。但是,你的AsyncTask不停止,和呼叫

  imageView.setImageDrawable(D);

导致应用下载的图像在错误的位置的看法。因为现在你重复使用相同的ImageView的。快速修复是不使用convertView。但它会你的应用程序慢一点。

I have coded to display few images in gridview. The images are getting displayed from urls. The problem i am facing is that the images get replaced when i scroll.. and the order of images keeps on changing once started.. this leads to delay in display of full image if i click on any image in grid.. Please help !

code :

public class ImageAdapter extends BaseAdapter {

    private Context mContext;
    private TextView txtUrl;
    private String response;
    public ImageView imageView;
    public static String[] mThumbIds;
    public ImageAdapter(Context c,String resp) {
        mContext = c;
        response = resp.trim();
        mThumbIds = resp.split(",");
    }

    public int getCount() {
        return mThumbIds.length;
    }

    public Object getItem(int position) {
        return null;
    }

    public long getItemId(int position) {
        return 0;
    }

    // create a new ImageView for each item referenced by the Adapter
    public View getView(int position, View convertView, ViewGroup parent) {

        if (convertView == null) {  // if it's not recycled, initialize some attributes
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(95, 95));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(6, 6, 6, 6);
        } else {
            imageView = (ImageView) convertView;
        }


        try {
             new LoadImageGrid(imageView).execute(mThumbIds[position]);

        } catch(Exception e) {
            txtUrl.setText("Error: Exception");
        }

        return imageView;

    }



class LoadImageGrid extends AsyncTask<String, Void, Drawable>
{

    ImageView imageView;
    public LoadImageGrid(ImageView im){
        imageView = im;
    }
    @Override
    protected Drawable doInBackground(String... args) {
        String url = args[0];
        Drawable d = null;
        try {
            d = Drawable.createFromStream((InputStream) new URL(url).getContent(), "src");
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return d;

    }


    @Override
    protected void onPostExecute(Drawable d) {
        imageView.setImageDrawable(d);
    }

解决方案

When you scroll your grid view, image views that are not visible returns to getView() as convertView parameter. But your asyncTask doesn't stop, and call

imageView.setImageDrawable(d);

leads to applying downloaded image to the view on wrong position. Because now you reuse the same imageView. Quick fix is not to use convertView. But it'll slow down your app a bit.

这篇关于在GridView的图片被替换上滚动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆