-
Notifications
You must be signed in to change notification settings - Fork 1.8k
动态替换adapter的时候,导致adapter复用错误,强转异常 #182
Comments
应该是复用相关的问题,参考FAQ:https://github.com/alibaba/vlayout/blob/master/docs/VLayoutFAQ.md 先检查一下代码 |
嗯, 但是
这里我的hasConsistItemtype=false了,感觉Adapter的itemType返回了相同类型了,DelegateAdapter转换后的itemType还是同一个 , 我发现是这样的,就是Aadapter在位置3,返回type为0,后来数据变了,3这个位置变成BAdapter了,然后给BAdapter里面的ViewHolder被强转成Aadapter里面的ViewHolder导致了报错, 我把没个Adapter的itemType都写成不一样的, 这个问题就不存在了. |
恩,你加日志或者 debug,把 |
感谢您百忙中抽空解答 : )
我觉得这里好像是中了我说的情况了, 在同一个位置,由于数据的变动导致这里由Aadapter变成了BAdapter,但是如果我在adapter里面没有覆盖getItemType,默认返回0的话,
所以这种情况会导致表层Adapter变了,而RecyclerView误认为是同一个,所以把之前的AAdapter的ViewHolder给了BAdapter,导致强转异常吧, |
嗯,是的,这里有个瑕疵,没有考虑到替换adapter的情况,所以 |
这个bug修复了吗? |
建议使用 tangram 来使用vlayout,直接使用vlayout成本略高。 @wengqizun |
因为这个问题的存在的,所以在同一个列表中使用多个DelegateAdapter.simpleAdapter时,也存在复用的问题。 |
如果vlayout存在这个问题,使用Tangram能规避这个问题吗?难道说Tangram内部做了处理? |
事情是这样, 购物app的首页, 用到了多种多样的布局,其中有一些会根据服务器端给的模版来变化
这样,
因为数据的变化可能会导致我这边的adapter变化,所以我维护了一系列的List来保存一些模板Adapter
每次刷新界面,我就写了
delegateAdapter.removeAdapters(xx)
delegateAdapter.addAdapters(xx),
这样,首次进页面,没问题, 但是在有数据的前提下, 再次刷新后,就会报Adapter强转异常,这个强转是我写了ViewHolder导致的, 但是AAdapter里面传入了BAdapter的ViewHolder.
后来我寻思着,可能是复用出了问题, 然后我给每个Adapter都加了getItemType返回一个递增且唯一的int,就好了.
我是好奇这是我用法的问题,还是VLayout的复用逻辑有一些瑕疵?
The text was updated successfully, but these errors were encountered: