繁体   English   中英

GridView Adapter AsyncTask显示图像时的奇怪行为

[英]GridView Adapter AsyncTask strange behavior when displaying images

我需要你的帮助!

在我的应用程序中,在GridView显示图像时出现奇怪的行为。 单元格显示图像,而不是默认的R.id.noimage和以前查看的图像。 在我添加适配器以加载位图AsyncTask后,出现了此错误。

我究竟做错了什么?

码:

public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder = new ViewHolder();
    View vi = null;
    ImageView image;
    if(convertView==null) {
        vi = inflater.inflate(R.layout.gall_item, null);
        Log.i("info","convertView==null");
    } else {
        vi = inflater.inflate(R.layout.gall_item, null);
        Log.i("info","else");
    }
    holder.position = position;
    image = (ImageView)vi.findViewById(R.id.img);
    TextView url_img = (TextView)vi.findViewById(R.id.url_img);
    TextView cer = (TextView)vi.findViewById(R.id.cer);
    TextView idi = (TextView)vi.findViewById(R.id.ids);
    url_img.setText(img2[position]);
    cer.setText(cer_ar[position]);
    idi.setText(id_ar[position]);
    new LoadImageT(holder).execute(image, img1[position],activity.getApplicationContext(),position);
    return vi;
}

class LoadImageT extends AsyncTask<Object, Void, Bitmap> {
    Context context;
    private ImageView imv;
    private String url;
    private Bitmap bitmap = null;
    private int posS;
    private ViewHolder mHolder;

    public LoadImageT(ViewHolder holder) {
        mHolder = holder;
    }

    @Override
    protected Bitmap doInBackground(Object... params) {
        imv = (ImageView) params[0];
        url = (String) params[1];
        context = (Context)params[2];
        posS = (Integer) params[3];
        bitmap = imageLoader.getBitmaptrue(url,imv,context);
        return bitmap;
    }

    @Override
    protected void onPostExecute(Bitmap result) {
        if (mHolder.position == posS) {
            imv.setVisibility(View.VISIBLE);
            imv.setImageBitmap(result);
        } else {
            int stub_id = R.drawable.noimage;
            imv.setImageResource(stub_id);
        }
    }
}

首先,正如Andy所建议的,如果您的视图为null,则对视图进行充气并设置标签,然后在该标签不为null时使用此标签,但它只会影响列表视图的效率。 其次,从适配器中删除您的异步任务代码,将其放入活动中并使用该对象。 看到这个链接吉尔解释说好听如何做多线程高效的方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM