Gridview 惰性网格视图在android中滚动时得到刷新 当我运行这段代码时,图像被一个一个地隐藏起来。当我滚动页面时,图像位置会发生变化,请帮助我解决此问题

Gridview 惰性网格视图在android中滚动时得到刷新 当我运行这段代码时,图像被一个一个地隐藏起来。当我滚动页面时,图像位置会发生变化,请帮助我解决此问题,gridview,lazy-loading,android-gridview,Gridview,Lazy Loading,Android Gridview,url数组被传递给图像网格构造函数。 通过使用异步任务,url被处理并返回位图 image_grid.java 使用这个类 公共类图像加载器{ MemoryCache MemoryCache=新的MemoryCache; 文件缓存文件缓存; private Map ImageView=Collections.synchronizedMapnew WeakHashMap; 执行服务执行服务; 公共ImageLoaderContext上下文{ fileCache=新的FileCachecontex

url数组被传递给图像网格构造函数。 通过使用异步任务,url被处理并返回位图

image_grid.java 使用这个类

公共类图像加载器{ MemoryCache MemoryCache=新的MemoryCache; 文件缓存文件缓存; private Map ImageView=Collections.synchronizedMapnew WeakHashMap; 执行服务执行服务; 公共ImageLoaderContext上下文{ fileCache=新的FileCachecontext; executorService=Executors.newFixedThreadPool5; } 最终int存根_id=R.可拉伸.加载; public void DisplayImageString url,ImageView ImageView { imageViews.putimageView,url; 位图位图=memoryCache.geturl; ifbitmap!=null imageView.setImageBitmapbitmap; 其他的 { 队列照片URL,图像视图; imageView.setImageResourcestub_id; } } 私有无效队列PhotoString url,ImageView ImageView { PhotoToLoad p=新的PhotoToLoadurl,imageView; executorService.submitnew PhotoloadERP; } 私有位图getBitmapString url { 文件f=fileCache.getFileurl; //从SD缓存 位图b=解码文件F; ifb!=null 返回b; //从网络 试一试{ 位图=空; URL imageUrl=新的URL; HttpURLConnection conn=HttpURLConnectionimageUrl.openConnection; conn.setConnectTimeout30000; conn.setReadTimeout30000; conn.setInstanceFollowRedirectstrue; InputStream为=conn.getInputStream; OutputStream os=新文件OutputStreamF; Utils.copyreamis,os; 操作系统关闭; 位图=解码文件; 返回位图; }捕获异常{ 例如,打印跟踪; 返回null; } } //对图像进行解码和缩放以减少内存消耗 私有位图解码文件f{ 试一试{ //解码图像大小 选项o=新的位图工厂选项; o、 inJustDecodeBounds=true; BitmapFactory.decodeStreamnew-FileInputStreamf,null,o; //找到正确的刻度值。它应该是2的幂。 所需的最终int_尺寸=70; 内部宽度=o.向外宽度,高度=o.向外高度; int标度=1; whiletrue{ IFU tmp/2宽度
public class image_grid extends BaseAdapter {
    private Context mContext;
    LayoutInflater inflater = null;
    private final String[] url;
    public image_grid(Context applicationContext, String[] url) {
        mContext = applicationContext;
        inflater = (LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        this.url = url;
    }
    @Override
    public int getCount() {
        return url.length;
    }
    @Override
    public Object getItem(int position) {
        return null;
    }
    @Override
    public long getItemId(int position) {
        return 0;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View grid;
        if (convertView == null) {
            grid = new View(mContext);
            grid = inflater.inflate(R.layout.assignment_image_grid, parent,
                    false);
        } else {
            grid = (View) convertView;
        }
        ImageView image = (ImageView) grid.findViewById(R.id.imageView1);
        TextView text = (TextView) grid.findViewById(R.id.textView1);
        ProgressBar pb = (ProgressBar) grid.findViewById(R.id.progressBar1);
        text.setText("Hai : " + position);
        System.out.println("url[position]" + url[position]);
        new DownloadImageTask(url[position], pb, image).execute();
        return grid;
    }
    public class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
        String url = null;
        ProgressBar pb = null;
        ImageView imageview = null;
        public DownloadImageTask(String url, ProgressBar pb, ImageView imageview) {
            super();
            this.url = url;
            this.pb = pb;
            this.imageview = imageview;
        }
        protected Bitmap doInBackground(String... pb_and_images) {
            return getBitmapDownloaded(url);
        }
        protected void onPostExecute(Bitmap result) {
            imageview.setVisibility(View.VISIBLE);
            imageview.setImageBitmap(result);
            pb.setVisibility(View.GONE);
        }
        /** This function downloads the image and returns the Bitmap **/
        private Bitmap getBitmapDownloaded(String url) {
            System.out.println("String URL " + url);
            Bitmap bitmap = null;
            try {
                bitmap = BitmapFactory.decodeStream((InputStream) new URL(url)
                        .getContent());
                return bitmap;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return bitmap;
        }
    }
}