ByRecyclerView加载更多,导致Glide显示图片闪屏

4,716 阅读1分钟

1.解决办法

使用 notifyItemRangeChanged(int positionStart, int itemCount) 方法替换 notifyDataSetChanged();

HomeAdapter适配中的部分代码,如下:

    public void appendData(List dataSet) {
        int positon = this.listData.size();
        if (dataSet != null && !dataSet.isEmpty()) {
            this.listData.addAll(dataSet);
//            notifyDataSetChanged();
            /**
             * 解决recyclerview刷新数据导致的闪屏
             * 用notifyItemRangeChanged方法替换notifyDataSetChanged
             */
             notifyItemRangeChanged(positon, dataSet.size());
        }
    }

2.适配器HomeAdapter中:glide加载图片的时候,setTag

        /**
         * 解决滑动recyclerview导致glide图片加载闪烁
         * 1.利用setTag
         * 2.Glide设置skipMemoryCache(true),跳过缓存
         */
        if (!bean.getImage().equals(articleViewHolder.iv.getTag(R.id.iv_hot))) {
            // 加载图片
            Glide.with(activity).load(bean.getImage()).skipMemoryCache(true)
//                    .apply(options)
                    .into(articleViewHolder.iv);
            articleViewHolder.iv.setTag(R.id.iv_hot, bean.getImage());
        }

只要设置为false,就可以不显示动画了,也就解决了闪烁问题。
代码其实就一句话。

((SimpleItemAnimator)recyclerView.getItemAnimator()).setSupportsChangeAnimations(false);