GWT - 分页在边缘情况下错误地添加和删除页面

GWT - Pagination adds and removes pages incorrectly at edge case scenarios

我有一个由 ListDataProvider 提供的带有分页的 CellTable。我将页面大小设置为 5,期望当 ListDataProvider 中的行数超过 5 的倍数时,页码会增加,反之亦然。我有添加和删除按钮,可用于添加和删除单元格行。

问题是分页以错误的 ListDataProvider 大小添加和删除页面。例如,由于页面大小为 5,我预计当我将第 6 行添加到 table 时,页面大小会增加。但是,当添加第 7 行而不是第 6 行时,页面大小会增加。

页面 增加第 6 个条目 -

页面增加了第 7 个条目 -

删除条目时也是同样的问题。当行大小下降到 4 而不是 5 时,页面会更新。如果我刷新页面,问题不会持续存在。例如,当我添加第 6 个条目并刷新页面时,页码按预期增加,删除时反之亦然。

我尝试对此进行调试,但无法弄清楚为什么会这样。我在这里做错了什么?我的代码-

@UiField(provided=true) CellTable<MyClass> myTable = new CellTable<MyClass>();
final ListDataProvider<MyClass> myProvider = new ListDataProvider<MyClass>();
final SingleSelectionModel<MyClass> selectionModel = new SingleSelectionModel<MyClass>();
@UiField(provided=true) Pagination pagination = new Pagination(PaginationSize.SMALL);
SimplePager pager;

myProvider.addDataDisplay(myTable);

// create and add columns

createPagination();

private void createPagination() {
    myTable.setSelectionModel(selectionModel);
    pager = new SimplePager(TextLocation.CENTER, ((SimplePager.Resources)GWT.create(SimplePager.Resources.class)), false, 0, false);
    pager.setRangeLimited(false);
    pager.setDisplay(myTable);
    pager.setPageSize(5);
    pagination.rebuild(pager);
}

我还在 onSuccess() 方法中调用 createPagination() 方法来实现添加和删除功能。

CellTable 和 Pagination 的 .ui.xml -

<bc:CellTable ui:field="myTable" striped="true" bordered="true" width="800px" styleName="{style.myTableStyle}"/>
<b:Pagination  ui:field="pagination" />

Adam 的评论帮助我调试了问题。

添加或删除数据后,我需要刷新 ListDataProvider 以便更改立即发生,而不是等到事件循环结束 -

myProvider.flush();