方案一:使用ViewPager
- 这种方案为Tablayout+ViewPager 但这种情况适合非连续的列表,每个分组都是独立的。若想做成分组横向滑动,组内容横向滑动就非常麻烦。
方案二:两个RecycleView联动
1. 优势
- 优点是分组RecycleView可以对应下面的View多个元素,通过Holder进行分割,还能定制移动到具体某个位置再切换。实现思路如下
2. 实现步骤思路
- 设置addOnScrollListener滑动监听,在onScrolled回调中,进行分组判断
- 通过获取layoutManager来找到第一个(findFirstVisibleItemPosition())和最后一个看见的控件
- 通过filterIndexed 方法来过滤获取当中的列表元素
val 数组 = 列表.filterIndexed { index, _ ->
index in firstPosition..lastPosition
}
- 如果需要现在屏幕宽度的某处为切换分割点则获取位置X
- 遍历数组,通过改数组控件的getLocationOnScreen获取左上角对应x,y。每个子项的判断操作为:
if (x坐标 in 1..标定点X) {
if (他的组下标 >= 占位符组下标) {
占位符 = 他
}
}