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