Android:回收站视图项中的图像在快速滚动时会大量改变

时间:2016-04-16 03:33:59

标签: android android-recyclerview

我的应用中有一个回收站视图。每个回收者视图项都有一个imageView。我使用asyncTask加载位图并将它们添加到磁盘缓存中,然后再将它们设置到onPostExecute的imageview中。

问题在于,如果我快速滚动列表,我可以看到图像在为该项目设置正确的图像之前洗牌很多。我对此行为的理解是,当我滚动列表时,回收器视图项内容将替换为新项的内容。但由于图像需要一些时间来加载,因此会产生改组效果。

我的问题是,是否有任何方法可以防止这种影响,或至少将其最小化,以便进行非常少的改组?

编辑:我尝试将图片位图设置为null,但它似乎没有任何区别。

 @Override
    public void onBindViewHolder(DataObjectHolder holder, int position) {
        holder.title.setText(list.get(position).getTitle());
        holder.subTitle.setText(list.get(position).getSub());
        holder.image.setImageBitmap(null);
        loadBitmap(position, holder.image);
    }

3 个答案:

答案 0 :(得分:6)

在 onBindViewHolder() 中添加以下行;

holder.setIsRecyclable(false);

答案 1 :(得分:0)

您不应该使用asyncTask在回收站视图中加载多个位图。您可以选择创建自己的ThreadPool或使用第二方库,如Picasso或Glide。 AsyncTask会尝试将位图加载到您引用的列表项中,但是由于您滚动得太快,所以它都搞砸了。

答案 2 :(得分:0)

使用第三方库,如Universal Image Loader(UIL)或Picasso或Glide。