我使用RecyclerView来展示一个列表视图,可以通过切换布局方式从列表布局切换到网格布局,但网格布局只显示所有数据中的一部分。当切换到网格布局时,会使用不同的布局XML文件进行呈现。
所有这一切都很好,除了当我滚动时,被回收(缓存)的列表布局视图混合在合适的网格布局视图项中。换句话说,我并不是为RecyclerView中的每一个项都使用layout_grid.xml
文件,而是有些项会使用layout_list.xml
布局以网格格式呈现。
这告诉我LayoutManager正在正确地工作,从列表布局切换到网格布局。但并不是所有的项视图都使用网格xml布局重新创建,而是使用了被回收的列表布局视图。
我尝试过RecyclerView.removeAllViews()
、RecyclerView.removeAllViewInLayout()
和RecyclerView.swapAdapter()
(强制重新加载适配器),但都没有成功。
更新:
如果我将列表向下滚动两个位置,然后从列表切换到网格布局,前两个位置不会调用onCreateViewHolder(),直接调用onBindViewHolder(),因此不会强制使用网格布局xml。而是对这前两个位置的项进行了回收(我想),并以列表布局格式显示。