首页 文章

RecyclerView onBindViewHolder没有调用有效负载

提问于
浏览
0

好吧,我正在解决如何解决这个问题...我正在尝试使用有效负载实现带有负载的RecyclerViews适配器onBindViewHolder,因为我在每个适配器项目上使用延迟加载来为每个卡/项目加载额外的信息 . RV .

所以我的问题是,即使我使用我正在使用的有效负载调用notifyItemChanged(这是一个简单的字符串),当它到达onBindViewHolder时,有效负载列表总是为空:S . 当然我用Google搜索了它,所有的帖子(btw的3个帖子的数量很棒)说我必须覆盖DefaultItemAnimator上的方法canReuseUpdatedViewHolder才能返回true以使有效负载工作 . 所以我继续这样做,完全不起作用 .

经过一些猴子测试(在任何项目完成加载之前完全向下滚动),我发现有时一个有效负载成功传递给onBindViewHolder ...挖掘更多,我继续设置并停止设置我从下载的额外信息我模型上的Lazy Loading WS . 直到我发现罪魁祸首是我在我的模型上设置一个巨大的String值(用于渲染图表,所以期望它在最坏的情况下大~5mb ...但通常是〜200k),如果我注释掉那行代码,该死的有效载荷传来......没有失败!即使我的有效载荷是一个简单的字符串!

我在这里开始相信巫术......

我试过的其他东西:1)在Adapter上使用setHasStableIds(true)(当然在getItemId()方法上使用uniques值)2)创建了我自己的ItemAnimator,它从DefaultItemAnimator扩展而来 . 我还发现animateChange永远不会被调用... 3)将ItemAnimator设置为NULL

我认为RV会将给定的模型附加到当前的ViewHolder,因为它对我来说没有意义,这种行为只有在设置那个巨大的字符串时才会发生......

任何建议或资源都会有所帮助......

1 回答

  • 0

    好吧,结果是我的 getItemViewType 逻辑错了......当我的额外WS完成时,我正在更改 getItemViewType 上使用的一些信息,所以我以前的ViewHolder类型与最新设置的不同,所以RV会将其处理为完全替换 .

相关问题