我正在处理的当前Android应用程序中有一些图像位于某些RecyclerView.ViewHolder
问题是相同的RecyclerView.ViewHolder
还包含其他格式化数据 - 即使图像本身保持不变,也必须调用这些更改notifyDataSetChanged
。
处理RecyclerView
内部图像加载的当前代码如下(注意它是伪代码)。
public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyViewHolder>
{
// more code here
@Override
public void onBindViewHolder(MyViewHolder holder, int position)
{
// more code here
loadMyImage(holder.picture, myLink);
}
public void loadMyImage(AppCompatImageView picture, Uri myLink)
{
picture.setImageResource(R.drawable.placeholder);
Glide.with(context).load(myLink).into(picture); // asynchronous load
}
}
问题是这会导致R.drawable.placeholder
和myLink
之间出现轻微但非常明显的闪烁。
现在我已经提出了两件事来解决这个问题。
1)尝试通过重做布局并重做基础代码将视图放入不同的视图持有者。
[这不是一个选择,因为构成该项目基础的意大利面和遗留代码的数量庞大]
2)尝试将行Glide.with(context).load(myLink).into(picture); // asynchronous load
更改为强制同步加载的行public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyViewHolder>
{
// more code here
@Override
public void onBindViewHolder(MyViewHolder holder, int position)
{
// more code here
loadMyImage(holder.picture, myLink);
}
public void loadMyImage(AppCompatImageView picture, Uri myLink)
{
picture.setImageResource(R.drawable.placeholder);
if (inCache(myLink))
{
Glide.with(context).load(myLink).into(picture).synchronously();
}
else
{
Glide.with(context).load(myLink).into(picture).asynchronously();
}
}
}
[从理论上去除闪烁并仅添加标称延迟 - 因为它已经在缓存中了] [/ p>
{{1}}