Android RecyclerView 频繁改变数据源出现闪退问题

最近项目中一个播放的列表,有上下切换功能。测试频繁切换更换刷新数据时,报出以下错误:
java.lang.IllegalArgumentException
Scrapped or attached views may not be recycled. isScrap:false isAttached:true

这个错误查了下,网上没有看到大神给出很给力的解答,stackoverflow上资料多一些,也是没怎么看明白。而且发生的情况还不一样。

大概的问题就是频繁切换数据。我项目里在刷新的时候,会调用adapter.clear();清楚数据后再设置上去。而这个设置过程是说直接从一个空view突然到满屏的一个数据填充过程发生了错误。但是英文直译过来明显是说view有可能不被回收问题,不知道两者存在什么联系

这个问题没明白为什么会出现,因为切换数据源时,慢慢切换,不会出现这种问题。测试那手速我不想描述。

后来问了一哥们,说遇到同样的问题。解决了,然后我特意去找让他私下问了问,也没给我解释原因,说让我去看源码。不知道原因去看源码,这种情况就进入了懵逼状态。

他给出的解决办法如下:

我程序中原来的刷新逻辑是,adapter.clear() 然后adapter.addAll(list); 完事了,正常情况下确实也没问题。然后那哥们就说加上adapter.notifyDataSetChanged();这句试试。没其他辙加上了,让测试随便手速去切换数据,嗯,解决了。虽然不知道为什么。。。。(不是一个纯技术 人啊,没搞懂原因其实)。

正常adapter.addAll(list)这句其实添加数据,是有刷新机制的,进去看了下源码不是整个列表notify的。所以猜测是不是更换所有数据,是要科学的去notify一次?

所以这个错误,在加上

adapter.notifyDataSetChanged()

这句后,我这是没问题了。如果有朋友也遇到这个问题,实在找不出办法,加上这句试试。


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值