【发布时间】:2016-09-10 21:55:53
【问题描述】:
好的,我对如何解决这个问题没有想法......我正在尝试使用有效负载实现 RecyclerViews 适配器 onBindViewHolder,因为我在每个适配器项目上使用延迟加载来为每张卡加载额外信息/房车上的物品。
所以我的问题是,即使我使用我正在使用的有效负载(这是一个简单的字符串)调用 notifyItemChanged,当它到达 onBindViewHolder 有效负载列表时,它始终是空的:S。 当然,我用谷歌搜索了它,这里的所有帖子(顺便说一句,3 个帖子的数量惊人)都说我必须重写 DefaultItemAnimator 上的 canReuseUpdatedViewHolder 方法以返回 true 才能使有效负载工作。所以我继续做了,完全没有用。
经过一些猴子测试(在任何项目完成加载之前一直向下滚动),我发现有时一个有效负载成功传递给 onBindViewHolder... 挖掘更多,我继续并停止在我的模型上设置我从延迟加载 WS 下载的额外信息。直到我发现罪魁祸首是我在我的模型上设置了一个巨大的字符串值(用于渲染图表,所以在最坏的情况下预计它会很大~5mb......但通常是~200k),如果我注释掉那行代码,该死的有效载荷被传递......没有失败!即使我的有效载荷是一个简单的字符串!
我开始相信这里的巫术......
我尝试过的其他内容: 1)在适配器上使用 setHasStableIds(true) (当然在 getItemId() 方法上使用唯一值) 2) 创建了我自己的从 DefaultItemAnimator 扩展的 ItemAnimator。我还发现 animateChange 从未被调用... 3) 设置ItemAnimator为NULL
我认为 RV 以某种方式将给定模型附加到当前 ViewHolder,因为对我来说这种行为没有意义,只有在设置那个巨大的字符串时才会发生......
任何建议或资源都会有所帮助...
【问题讨论】:
标签: android android-recyclerview