自定义 SimpleCursor 适配器 BindView 调用

Custom SimpleCursor adapter BindView calls

我想知道是否有办法让 BindView 每个项目只工作一次?

我们滚动离开屏幕的项目是否被破坏了?当他们回来时,我们必须再次 运行 bindview?

原因是我让我的适配器下载图像并将其设置在项目上。

当我滚动时,即使我没有退出应用程序,图像也会再次下载。

每次显示一个项目时都会调用 bindview "returns" 所以即使我已经下载了它,它也会再次执行 asyntask(在适配器中调用 asyntask)

我什至尝试在每次下载后将 BLOB 保存在我的数据库中,以了解何时调用 asyntast 以及何时仅从数组中制作位图

if(photoBArray != null){    
            Bitmap bitmap = BitmapFactory.decodeByteArray(photoBArray, 0, photoBArray.length);
                holder.icon.setImageBitmap(bitmap);
            }else{
            holder.icon.setImageResource(R.drawable.loader);
            String urlString = "https://maps.googleapis.com/maps/api/place/photo?maxwidth=100&photoreference="
                    + c.getString(c.getColumnIndex(PlacesDBHelper.PHOTO_REFERENCE_COL))+"&key=API_KEY";
            Log.e("Photo REFERENCE", c.getString(c.getColumnIndex(PlacesDBHelper.PHOTO_REFERENCE_COL)));
            try {
                URL url = new URL(urlString); // create new URL object from url string
                new ImageDownloader(holder.icon, this).execute(url);
            }catch (Exception e){
                Log.e("Error in url", e.getMessage());
            }
            }

我也在使用 chrisbanes pulltorefresh listview,我不确定这是否是问题的原因

底线问题:当一个项目回到屏幕上而不是再次创建时,如何使它看起来稳定且准备就绪? (因为即使我不下载图像而只设置位图,setimagebitmap 的动作也可能在缓慢的情况下可见 phone)

提前致谢!

ListView 的重点是回收行视图。它们没有被销毁,它们被传递回适配器以与另一行的新数据绑定。如果您将项目滚动到屏幕外足够远然后将其滚动回屏幕,预计 getView(或 bindView 在光标适配器的情况下)将被再次调用。

您需要的是下载任务和适配器之间的图像缓存层。当 bindView 发生时,首先检查缓存以查看图像是否存在。如果是,请使用它。如果不是,请下载并添加到缓存中,然后再使用。