You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

未调用setRowHeadItems时使用evrencoskun的TableView隐藏行崩溃

问题:evrencoskun TableView隐藏行时因未设置RowHeadItems崩溃

场景与现象

  • 使用evrencoskun的TableView组件隐藏某一行,因表格无需行标签,未调用setRowHeadItems方法
  • 触发hideRow时应用直接崩溃,抛出IndexOutOfBoundsException
  • 已确认崩溃前表格已加载包含目标行在内的完整数据

崩溃栈信息

FATAL EXCEPTION: main
Process: com.example.app, PID: 20150
java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0
    at jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
    at jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
    at jdk.internal.util.Preconditions.checkIndex(Preconditions.java:266)
    at java.util.Objects.checkIndex(Objects.java:359)
    at java.util.ArrayList.remove(ArrayList.java:511)
    at com.evrencoskun.tableview.adapter.recyclerview.AbstractRecyclerViewAdapter.deleteItem(AbstractRecyclerViewAdapter.java:99)
    at com.evrencoskun.tableview.adapter.AbstractTableAdapter.removeRow(AbstractTableAdapter.java:244)
    at com.evrencoskun.tableview.handler.VisibilityHandler.hideRow(VisibilityHandler.java:63)
    at com.evrencoskun.tableview.TableView.hideRow(TableView.java:618)
    ...

原因分析

TableView的hideRow方法内部会同步更新数据行、列头和行头三个数据集。如果未初始化行头集合(未调用setRowHeadItems),对应的集合为空,当框架尝试删除对应索引的行头元素时,就会触发数组越界异常。

解决方案

方案1:初始化空行头集合(推荐)

在加载表格数据时,即使不需要显示行头,也要调用setRowHeadItems传入一个与数据行数量匹配的空集合,示例代码:

// rowCount为表格数据的总行数
List<Object> emptyRowHeads = new ArrayList<>(Collections.nCopies(rowCount, null));
tableView.setRowHeadItems(emptyRowHeads);

这样框架操作行头集合时不会因为索引不存在崩溃,同时由于行头内容为null,自定义的RowHeaderViewHolder可以处理成不显示内容的布局。

方案2:重写适配器方法(进阶)

如果不想初始化空集合,可以重写AbstractTableAdapter中的removeRow方法,跳过行头集合的操作逻辑,示例:

@Override
public void removeRow(int position) {
    // 只操作数据行集合,跳过行头操作
    getCellItems().remove(position);
    notifyDataSetChanged();
}

注意:此方法可能会影响TableView的其他联动逻辑,需自行测试验证。

内容的提问来源于stack exchange,提问作者incarnadine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 23:12:19