Android 未调用有效负载的RecyclerView onBindViewHolder

Android 未调用有效负载的RecyclerView onBindViewHolder,android,android-recyclerview,Android,Android Recyclerview,好吧,关于如何解决这个问题,我已经没有主意了。。。我正试图在BindViewHolder上使用有效负载实现RecyclerViews适配器,因为我在每个适配器项上使用延迟加载来加载RV上每个卡/项的额外信息 所以我的问题是,即使我调用notifyItemChanged,当它到达onBindViewHolder负载列表时,我使用的负载(一个简单的字符串)也总是空的:s。 当然,我在谷歌上搜索了一下,这里的所有帖子(顺便说一句,3篇帖子数量惊人)都说我必须重写DefaultItemAnimator上

好吧,关于如何解决这个问题,我已经没有主意了。。。我正试图在BindViewHolder上使用有效负载实现RecyclerViews适配器,因为我在每个适配器项上使用延迟加载来加载RV上每个卡/项的额外信息

所以我的问题是,即使我调用notifyItemChanged,当它到达onBindViewHolder负载列表时,我使用的负载(一个简单的字符串)也总是空的:s。 当然,我在谷歌上搜索了一下,这里的所有帖子(顺便说一句,3篇帖子数量惊人)都说我必须重写DefaultItemAnimator上的canReuseUpdatedViewHolder方法,以返回true,这样有效负载才能工作。所以我继续这样做,但完全没有用

经过一些monkey测试(在任何项目完成加载之前一直向下滚动),我发现有时一个有效负载会成功地传递给onBindViewHolder。。。 挖掘更多信息后,我继续前进,并停止设置从我的模型上的延迟加载WS下载的额外信息。直到我发现罪魁祸首是在我的模型上设置了一个巨大的字符串值(用于绘制图表,所以在最坏的情况下,预计它会很大~5mb…但通常是~200k),如果我注释掉那行代码,该死的负载就会被传递。。。毫无疑问!即使我的有效载荷是一个简单的字符串

我开始相信巫术了

我试过的其他东西: 1) 在适配器上使用setHassTableId(true)(当然在getItemId()方法上使用uniques值) 2) 创建了从DefaultItemAnimator扩展而来的我自己的ItemAnimator。我还发现animateChange从未被称为。。。 3) 将ItemAnimator设置为NULL

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


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

好吧,这会导致我的
getItemViewType
逻辑错误。。。当我的额外WS完成时,我正在更改在
getItemViewType
上使用的一些信息,因此我以前的ViewHolder类型与要设置的最新类型不同,因此RV将作为完全替换处理

结果是我的
getItemViewType
逻辑错误。。。当我的额外WS完成时,我正在更改在
getItemViewType
上使用的一些信息,因此我以前的ViewHolder类型与要设置的最新类型不同,因此RV将作为完全替换处理