
初入 android 的萌新向大神请教一下,弄了一个水平滑动的 recyclerview 问题是加载过的图片,往回之后又看过它重新加载了,怎么让它不加载啊 我直接上部分代码,直观点,用的 databinding 加载数据和 adapter
@BindingAdapter({"bind:imageUrl","bind:error"}) public static void ladImage(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 recycle 被回收是无法避免的,要不内存早晚爆掉,如果为了体验好些,可以多缓存几个页面,回收的慢些就好了,但是要控制好大小,小心 oom recyclerView.setItemViewCacheSize(10); |
4 0x8192dd 2018-02-05 01:54:22 +08:00 via Android 重新加载是不可避免的,也是应该的,如果重新加载图片在 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 会一次性出来。 |