V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Jimjay
V2EX  ›  Android

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

  •  
  •   Jimjay · 2018-02-04 22:44:30 +08:00 · 8315 次点击
    这是一个创建于 2244 天前的主题,其中的信息可能已经有所发展或是发生改变。

    初入 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));
    }
    
    11 条回复    2018-02-09 17:48:49 +08:00
    sty
        1
    sty  
       2018-02-04 23:42:01 +08:00 via Android
    如果你有 10000 个条目,不回收吗
    CFO
        2
    CFO  
       2018-02-05 01:34:49 +08:00 via Android
    你知道 recycler 是什么意思吗?
    lcorange
        3
    lcorange  
       2018-02-05 01:47:44 +08:00   ❤️ 1
    recycle 被回收是无法避免的,要不内存早晚爆掉,如果为了体验好些,可以多缓存几个页面,回收的慢些就好了,但是要控制好大小,小心 oom
    recyclerView.setItemViewCacheSize(10);
    0x8192dd
        4
    0x8192dd  
       2018-02-05 01:54:22 +08:00 via Android   ❤️ 1
    重新加载是不可避免的,也是应该的,如果重新加载图片在 UI 上显示效果不好或者有很明显的加载过程,你应该考虑的是优化加载速度比如降低图片大小,而不是不加载
    gavin6liu
        5
    gavin6liu  
       2018-02-05 17:08:28 +08:00
    看代码,没啥问题啊,Glide 会自动缓存图片到内存可以直接显示,你是想 Glide 加载已经存在的图片,没有 transition 动画?
    Jimjay
        6
    Jimjay  
    OP
       2018-02-05 17:18:37 +08:00 via Android
    @tsunamibad 在图片的大小方面,我已经选择最小到能接受的程度了,能否具体讲一下优化速度的方法,而且因为我没有设置 placeholder, 还有 image view 下面还有 text views, 每次往回滑 text view 都被顶到最上,重新加载后又顶下来,视觉效果不好,我想有没有解决的办法,具体参考案例 Google play 商店,我试过,它没有我这种情况,不知是否用 recyclerview 实现的
    Jimjay
        7
    Jimjay  
    OP
       2018-02-05 17:22:22 +08:00 via Android
    @gavin6liu 我的困扰是,image view 下面还有一个 textview 作标题,组成一个 item, 然后我每次往回滑,它明明加载过的图片还要重新加载一遍,然后下面标题别顶上去,等图片加载完又恢复原位,而这个视觉体验并不好,有没有解决的办法
    Jimjay
        8
    Jimjay  
    OP
       2018-02-05 17:26:35 +08:00 via Android
    @lcorange 不知 glide 是否提供修改回收数量的接口,不要让 items 出了屏幕就回收
    allan1st
        9
    allan1st  
       2018-02-05 18:48:11 +08:00
    @Jimjay 第一次加载成功以后把图像的宽高比存起来
    V2exUser
        10
    V2exUser  
       2018-02-09 17:47:03 +08:00
    recy 就是拿已经出了屏幕的 itemView 复用啊,再进入屏幕当然要重新填值。
    V2exUser
        11
    V2exUser  
       2018-02-09 17:48:49 +08:00
    真要不复用的话,外面放一个水平的 scrollview,这样内部的 recy 的 item 会一次性出来。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1231 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 23:23 · PVG 07:23 · LAX 16:23 · JFK 19:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.