RecyclerView中的动态高度Glide ImageView在调用notifydatasetchanged时闪烁?
Posted
技术标签:
【中文标题】RecyclerView中的动态高度Glide ImageView在调用notifydatasetchanged时闪烁?【英文标题】:Dynamic height Glide ImageView inside RecyclerView Blinking on calling notifydatasetchanged? 【发布时间】:2017-07-24 09:58:24 【问题描述】:我正在创建一个 RecyclerView 来显示一些图像和文本,然后用户可以为 RecyclerView 的行添加书签。 RecyclerView 的图像在宽度和高度上匹配父级将是 wrap_content。单击书签时,适配器会在 RecyclerView 中调用 notifydatasetchanged。我的问题是,在调用 notifydatasetchanged 更改后,RecyclerView 会按高度闪烁其图像。
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position)
if (holder instanceof VHITEM)
final VHITEM VHitem = (VHITEM) holder;
Glide.with(mContext)
.load(articleDataList.get(position).SourcePath)
.asBitmap()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.placeholder(R.drawable.defaultimage)
.error(R.drawable.defaultimage)
.dontAnimate()
.into(VHitem.imageViewTagPic);
OnButton 点击
VHItem.imageViewAddRemoveBookmark.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
notifyDataSetChanged();
RecyclerView 配置
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(linearLayoutManager);
【问题讨论】:
交叉链接:github.com/bumptech/glide/issues/1599 【参考方案1】:尝试在RecyclerView
上使用它来限制视图的闪烁。
RecyclerView.ItemAnimator animator = mRecycler.getItemAnimator();
if (animator instanceof SimpleItemAnimator)
((SimpleItemAnimator) animator).setSupportsChangeAnimations(false);
【讨论】:
试过了,但这不是问题。 Glide 在 notifydataset 上重新加载其图像已更改。如何避免这种情况 您能否用代码 sn-p 更新您的问题?【参考方案2】:不是因为glide,如果item数据发生变化调用notifyitemchanged(position,payload)然后覆盖onBindViewHolder 3参数方法
【讨论】:
以上是关于RecyclerView中的动态高度Glide ImageView在调用notifydatasetchanged时闪烁?的主要内容,如果未能解决你的问题,请参考以下文章
Android 解决RecyclerView瀑布流效果结合Glide使用时图片变形的问题
再次向上滚动后,带有 Glide 的 RecyclerView 导致 NullPointer
具有 recyclerview 和 tablayout 的动态高度查看器