使用evrencoskun/TableView库时水平滚动破坏表格布局问题求助
问题描述
我使用如下TableView库为我的应用数据创建表格:https://github.com/evrencoskun/TableView
该库实用性较强,但当表格数据超出屏幕尺寸、即行数超过屏幕可显示范围时,水平滚动功能会出现异常。
当存在未在屏幕上展示的数据行时,我执行水平滚动操作查看右侧列,这些动态数据行不会同步滚动,进而导致表格布局错乱。
请查看下方截图以便清晰了解具体问题:


我已经下载了该GitHub仓库提供的示例应用,运行状态完全正常,但我暂未找到自有项目出现布局错乱问题的根本原因。
若能提供相关帮助或指导,我将不胜感激。
解决方案
根因说明
该问题由RecyclerView复用机制与TableView横向滚动状态未同步导致:横向滚动后新滑入屏幕的行ViewHolder复用了旧的item实例,未主动对齐当前全局的横向滚动偏移量,最终出现行错位。
修复步骤
- 全局记录横向滚动偏移量
初始化TableView时添加滚动监听,保存实时横向滚动位置:
// 全局变量存储当前横向滚动偏移 private var currentHorizontalScrollX = 0 tableView.addOnScrollListener(object : RecyclerView.OnScrollListener() { override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { super.onScrolled(recyclerView, dx, dy) if (dx != 0) { currentHorizontalScrollX = tableView.horizontalScrollOffset } } })
- 绑定单元格时同步滚动位置
在Adapter的onBindCellViewHolder方法中,每次绑定数据都强制对齐当前滚动偏移:
override fun onBindCellViewHolder(holder: CellViewHolder, columnPosition: Int, rowPosition: Int) { // 原有数据绑定逻辑 // 新增同步横向滚动位置逻辑 holder.cellContentContainer.scrollTo(currentHorizontalScrollX, 0) }
- 处理ViewHolder复用逻辑
重写Adapter的onViewRecycled方法,复用前清理旧的滚动状态:
override fun onViewRecycled(holder: RecyclerView.ViewHolder) { super.onViewRecycled(holder) if (holder is CellViewHolder) { holder.cellContentContainer.scrollTo(0, 0) } }
额外校验项
- 所有列宽度为固定值,未动态修改列宽
- 单元格内部未添加额外可横向滚动控件,避免滚动事件冲突
- 未关闭TableView的
isHorizontalScrollEnabled配置
内容的提问来源于stack exchange,提问作者Saurabh Shetty
相关产品推荐
相关产品推荐

