背景:
我们在开发过程中,经常会混合不同的style view展示,对不同的内容有着不同的要求。列表是提供容易的view。在Android中,recycleview支持多样化的线上,但是我们会发现,布局的样式基本都被layoutmanager管理者,设置好布局manager,就无法展示多样化,这样很不利于我们的开发过程。
需求:
我们在开发过程中,往往需要处理这些,比如:我们在瀑布流的manager中,需要占用一行来显示我们其他的东西,如下图所示:
瀑布流现在有五条数据:A、B、C、D、E。这是一个瀑布流,瀑布流是左右排队,C需要单独占领一行,这个怎么处理么
只需要重写RecycleView.Adapter的onViewAttachedToWindow(ViewHolder)的方法。
这里会涉及到一个getItemViewType():
我们正常都是支持一种类型,
也就是在onCreateViewHolder方法,创建ViewHolder只创建一个,默认itemType的值为0.
如果你的数据源对应好多种数据类型,可以为每种创建一个ViewHolder样式,就可以通过这样。
比如一片文章:有标题、有文字段落、有图片、有视频、有引用。
我们可以定义五种类型,这样就组建一篇完整的数据类型。
所以在onViewAttachedToWindow中,是view添加到窗口时,获取当前view的位置,如果这个位置的type是需要占一屏的,直接设置
StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) holder.itemView.getLayoutParams();
params.setFullSpan(true);
setFullSpan(true):这个Span(一栏)填满全屏,其他的还是瀑布流展示。这样可以做到多样化显示。