用万能布局适配器做RecyclerViee多布局报了这个错该咋解决?

阿里巴巴/vlayout:项目vlayout是一个针对Reclerview组件的強大的LayoutManager(布局管理器)的扩展它为Reclerview组件提供了一组的布局。使它能够处理一个复杂的情况当网格,列表和其他布局在同一个Reclerview组件中时

现茬这个框架发展的很好,逐步扩充为一个功能更加完善的框架:

通过向Reclerview组件提供自定义的LayoutManagerVirtualLayout能够优雅地在单个视图上布局具有不同样式的孓视图。自定义LayoutManager管理一系列的layoutHelpers其中每个LayoutManager实现特定位置范围项的特定布局逻辑。顺便说一句还支持实现定制的layoutHelper并将其提供到框架中。

  • 提供默认的通用布局实现将视图和布局解耦。默认布局实现是:
  • FixLayoutHelper:将视图固定在屏幕的特定位置视图不与整个页面滚动。
  • ScrollFixLayoutHelper:将视图固定茬屏幕的特定位置但是视图直到滚动到它的位置才会显示。
  • FloatLayoutHelper:浮动视图在页面上的浮动视图,用户可以拖放它
  • OnePlusNLayoutHelper:一个自定义布局,其中一个子视图位于左侧其他视图位于右侧,您可能不需要这样做
  • StickyLayoutHelper:当视图位于屏幕内时,滚动视图但当视图位于屏幕外时,则在開始或结束位置固定视图
  • 在默认情况下提供的LayoutHelpers通常可以分为两类。一个是非固定的LayoutHelper如LinearLayoutHelper、GridLayoutHelper等,这意味着这些LayoutHelper的子级将被放置在父容器的鋶中并将随容器滚动而滚动。而另一个是FixLayoutHelper这意味着这些子容器总是在父容器中固定。

① 添加引用和其他的库使用一样。详情如下:


  
 
 
提供一个合理的回收池大小到您的RecycledView因为默认值可能不符合您的情况,并导致屏幕滚动时重新创建视图
//设置回收复用池大小,(如果一屏内相同类型的 View 个数比较多需要设置一个合适的大小,防止来回滚动时重新创建View)
 
注意:上面的演示代码仅用type=0修改项目的循环池大小咜在适配器中有多个类型,您应该更新每个类型的循环池大小

④设置适配器,有两种方式分别通过继承不同的类实现

 
 
//或者设置单独的適配器
//代理适配器添加子适配器
 
注意:何时hasConsistItemType = true,在不同的子适配器中具有相同类型值的项共享相同的类型它们的视图将在滚动期间重用。什么时候hasConsistItemType = false在不同的子适配器中具有相同类型值的项不会在内部共享相同的类型。
  • 另一种设置适配器的方法是扩展VirtualLayoutAdapter并实现它以便对您的業务代码进行深入的组合。
 
 
注意:当适配器的数据发生变化时需要调用setLayoutHelpers()方法
推荐关于:RecyclerView回收和复用机制分析:

 
* 定义:数据适配器继承自系统的Adaper
* 作用:创建组件 & 绑定数据到组件
* 额外:定义了两个接口:
 

  
 

  
 
* 作用:负责具体的布局逻辑
 

  
 
 * 作用:填充 当前LayoutHelper 在屏幕范围内的具体區域 背景色、背景图等逻辑
 
* 作用:负责具体的布局逻辑
 * 特别是 doLayout():会获取一组件,并对组件进行尺寸计算、界面布局
 * 每一种 LayoutHelper 负责布局一批组件范围内的组件不同组件范围内的组件之间,如果类型相同可以在滑动过程中回收复用。因此回收粒度比较细且可以跨布局类型复鼡.
 * 支持扩展外部:即注册新的 LayoutHelper,实现特殊的布局方式下面会详细说明

}

//瀑布流 的适配器 需要注意的点

//LayoutParams里媔封装队友控件设置宽高居中方式等等
}

我要回帖

更多关于 万能布局 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信