Recyclerview 往回滑怎么停止重复加载图片

2018-02-04 22:44:30 +08:00
 Jimjay

初入 android 的萌新向大神请教一下,弄了一个水平滑动的 recyclerview 问题是加载过的图片,往回之后又看过它重新加载了,怎么让它不加载啊 我直接上部分代码,直观点,用的 databinding 加载数据和 adapter

@BindingAdapter({"bind:imageUrl","bind:error"})
public static void loadImage(ImageView view, String url, Drawable error){
                          Glide.with(view.getContext()).load(UriUtil.completeImgUrl(url)).error(error).into(view);
}

@BindingAdapter("bind:data")
public static void setData(RecyclerView recyclerView, List<ItemData> data){
    setHorizontalRVdata(recyclerView, data);
}

下面是 adapter 部分

    @Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    B binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), getLayoutId(viewType), parent, false);
    return new BaseViewHolder(binding.getRoot());
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    B binding = DataBindingUtil.getBinding(holder.itemView);
    onBindItem(binding, items.get(position));
}
13518 次点击
所在节点    Android
11 条回复
sty
2018-02-04 23:42:01 +08:00
如果你有 10000 个条目,不回收吗
CFO
2018-02-05 01:34:49 +08:00
你知道 recycler 是什么意思吗?
lcorange
2018-02-05 01:47:44 +08:00
recycle 被回收是无法避免的,要不内存早晚爆掉,如果为了体验好些,可以多缓存几个页面,回收的慢些就好了,但是要控制好大小,小心 oom
recyclerView.setItemViewCacheSize(10);
0x8192dd
2018-02-05 01:54:22 +08:00
重新加载是不可避免的,也是应该的,如果重新加载图片在 UI 上显示效果不好或者有很明显的加载过程,你应该考虑的是优化加载速度比如降低图片大小,而不是不加载
gavin6liu
2018-02-05 17:08:28 +08:00
看代码,没啥问题啊,Glide 会自动缓存图片到内存可以直接显示,你是想 Glide 加载已经存在的图片,没有 transition 动画?
Jimjay
2018-02-05 17:18:37 +08:00
@tsunamibad 在图片的大小方面,我已经选择最小到能接受的程度了,能否具体讲一下优化速度的方法,而且因为我没有设置 placeholder, 还有 image view 下面还有 text views, 每次往回滑 text view 都被顶到最上,重新加载后又顶下来,视觉效果不好,我想有没有解决的办法,具体参考案例 Google play 商店,我试过,它没有我这种情况,不知是否用 recyclerview 实现的
Jimjay
2018-02-05 17:22:22 +08:00
@gavin6liu 我的困扰是,image view 下面还有一个 textview 作标题,组成一个 item, 然后我每次往回滑,它明明加载过的图片还要重新加载一遍,然后下面标题别顶上去,等图片加载完又恢复原位,而这个视觉体验并不好,有没有解决的办法
Jimjay
2018-02-05 17:26:35 +08:00
@lcorange 不知 glide 是否提供修改回收数量的接口,不要让 items 出了屏幕就回收
allan1st
2018-02-05 18:48:11 +08:00
@Jimjay 第一次加载成功以后把图像的宽高比存起来
V2exUser
2018-02-09 17:47:03 +08:00
recy 就是拿已经出了屏幕的 itemView 复用啊,再进入屏幕当然要重新填值。
V2exUser
2018-02-09 17:48:49 +08:00
真要不复用的话,外面放一个水平的 scrollview,这样内部的 recy 的 item 会一次性出来。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/428433

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX