gridview中的图像在滚动时被替换

时间:2013-03-08 15:36:20

标签: android android-gridview

我编码在gridview中显示少量图像。图像从网址显示。 我面临的问题是当我滚动时图像被替换..并且一旦开始图像的顺序一直在变化..如果我点击网格中的任何图像,这会导致完整图像的显示延迟。 请帮忙!

代码:

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);
    }

2 个答案:

答案 0 :(得分:1)

滚动网格视图时,不可见的图像视图将返回getView()作为convertView参数。但是你的asyncTask不会停止,并调用

imageView.setImageDrawable(d);

导致将下载的图像应用于错误位置的视图。因为现在你重复使用相同的imageView。快速修复不是使用convertView。但它会减慢你的应用程序的速度。

答案 1 :(得分:0)

这似乎与转换视图有关。当您使用转换视图重用图像空间时,您应该使用该范围内的Imageview。我建议在你当前的类代码中找到它的id的imageview,然后再播放它。