首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

详细聊聊 RecyclerView 缓存机制

它封装了以下属性: View itemView:对应RecyclerView的子View int mPosition:View当前对应数据在数据源中的位置 int mOldPosition:View上次绑定的数据在数据源中的位置...已经绑定好了数据,无需重新绑定 FLAG_UPDATE:数据发生了变化,View需要重新绑定 FLAG_INVALID:数据失效了,View需要重新绑定 FLAG_REMOVED:数据从数据源中删除,View...:从scrap缓存中获取到的ViewHolder FLAG_IGNORE:如果回收该类型的ViewHolder会报错 FLAG_TMP_DETACHED:表示ItemView从RecyclerView上...DETACHED了,detach和remove的区别是,remove会将View从ViewGroup的children数组中删除并且刷新ViewGroup,detach只会删除不会触发刷新 FLAG_ADAPTER_FULLUPDATE...轻量删除View,从RecyclerView children数组中删除,但是不会重新绘制RecyclerView 放入scrap缓存中 4.2.2.4 从mCachedViews中获取ViewHolder

2.1K43

记一次全民K歌的crash定位过程

分离的ItemView 进行查找并返回(ChildHelper主要是接管了RecyclerView对子View的处理,解决动画过程中,子View与Adapter数据不同步的问题,有兴趣可自行了解,此处不展开...mState.isPreLayout()) {            throw new IllegalStateException("should not receive a removed view...四、关联 整理下我们已有的线索: 引起crash的holder处于FLAG_REMOVED的状态或与Adapter取到的类型不一致 RecyclerView创建了两个ViewHolder并指向了同一个Footer...的出现,一个新创建的添加到RecyclerView中显示,并清除FLAG_TMP_DETACHED标记,另一个仍然存在于Scrap缓存中未被使用 ④ 取到了Scrap缓存中Footer的ViewHolder...,尝试回收至RecycledViewPool,却发现Footer已经不是FLAG_TMP_DETACHED的状态,因为上一步已经把它添加到RecyclerView中,清除了这一标记,于是抛出文章开头的IllegalArgumentException

2.2K30

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券