lixi
lixi
6.5.0 依旧有该问题
这边是由于你移除已经添加的 adapter 时,此时 DelegateAdapter 中的 index 会被重建,这个时候缓存的 ViewHolder 可能会被重用,但是此时的 ViewType 已经不是对应到原来的 Adapter 上了,所以会有类转换异常,具体可以看下 DelegateAdapter 的 viewType 生成原理 ```java DelegateAdapter adapter; // clear RecycledViewPool before removeAdapter recyclerView.getRecycledViewPool().clear(); // the itemViewTypes{0-N} of...
@LinXiaoTao 其实你说的通过 viewType 不完全能解决的,除非你在创建 `DelegateAdapter` 的时候设置 `hasConsistItemType`=true ,管理整个 DelegateAdapter 的 viewType 。 目前 addAdapterX、removeAdapterX 最终都会调用 `setAdapters` 而该方法第一行就是调用 `clear()` 重置 `mIndexGen`。这个时候,原来的 subAdapter 对应的 `index` 可能会发生改变。 而 viewType 是根据 Adapter 的 `index`...
@LinXiaoTao 之前说的大致如下: * 如果 `hasConsistItemType `=true, DelegateAdapter 会直接返回 subItemType ,不同 SubAdapter 之间相同的 subItemType 会复用 ViewHolder,所以当 `hasConsistItemType`= false 时,还是有可能会出现新计算的 CantorViewType 和缓存的 ViewHolder 出现冲突不对应 * 对 DeleteAdapter 的 SubAdapter 增加移除的操作都会重建 SubAdapter 的索引,会影响到...
@LinXiaoTao 可以这么说。假设 mCommoditySearchEmptyAdapter 和 mRecentSearchAdapter 的 ItemViewType 都是 {1,2,3} , 那么两个计算出来的 viewType 会一致,这个时候就会涉及到 这两个 Adapter 中 相同的 viewType 对应的 ViewHolder 是否可以转换。 ~~~不然的话 就得先清除 RecyclerViewPool, 还不行的话,就在之后再调用一次 notifyDataSetChanged 全局刷新一次~~~ --- #### UPDATED...
@LinXiaoTao ~~~因为 setAdapters 中有 requestLayout 调用 所以,界面重绘比 `RecyclerViewPool.clear()` 更早,所以 才说操作 SubAdapter 的 增加移除时需要先确保是否需要设置数据,比如先移除数据,在清缓存,再移除 Adapter,再添加新的 Adapter,在通知界面变更。~~~ 当然,优化需要大佬来做处理
@LinXiaoTao 将清除 View 的缓存放到设置之前~ 仔细想想并不需要去管理那些数据~ ```java RecycledViewPool.clear(); delegateAdapter.setAdapters(newAdapters); ```
如果不使用 tangram ,不要动态添加/移除 Adapter,而是通过动态管理 Adapter 中的数据来规避这个问题。 比如 ```java public void onCreate(xx){ ...... DelegateAdapter adapter = new DelegateAdapter(); List adapters = new ArrayList(); adapters.add(headAdapter); adapters.add(contentListAdapter); adapters.add(emptyListAdapter); recyclerView.setAdapter(adapter); ....... } public void...
目测不是由 vlayout 引起
应用:菜谱大全,婴儿辅食食谱,安全期,计步器 截图:图较多,且页面简单,就不上传了 :) 吐槽&建议: * 设置 divider 高度时,会出现页面跳跃 (LinearLayoutHelper, 其他 Layout 未测试) 情况一:#223 情况二:新的 item 被创建时,会发生界面抖动,原以为是图片高度变化,实际是 divider 的影响 * 添加多个 SubDynamicAdapter (默认都无数据) , 当第二个的 Adapter 先添加数据,然后在添加第一个 Adapter 的数据,这个时候 RecyclerView 显示的第一项为...