如果我尝试隐藏带有 evrencoskun 的
TableView
的行,但尚未调用 setRowHeadItems
(因为我的表没有行标签),那么我的应用程序就会崩溃:
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)
...
我已经检查过在崩溃之前该表已被赋予数据(包括我试图隐藏的行)。
当行被删除时,我们最终会得到
removeRow
中的 AbstractTableAdapter
函数:
public void removeRow(int rowPosition) {
this.mCellRecyclerViewAdapter.deleteItem(rowPosition);
this.mRowHeaderRecyclerViewAdapter.deleteItem(rowPosition);
}
错误发生在第二行,因为备份
mRowHeaderRecyclerViewAdapter
的数据集是空的。
要解决此问题,您可以更改库以在删除相应的行标题之前检查是否存在行标题,或者简单地创建任意行标题,然后在 XML 中将其宽度设置为 0:
app:row_header_width="0dp"