我有一个简单的celltable:
a)用于从服务器检索整个值列表的计时器(通过rpc)。当数据来自服务器时:
public void onSuccess(final Object result) {
myList ((List<myObject>) result);
setRowData(myList);
}
b)用于刷新当前显示页面的AsyncDataProvider,其中:
protected void onRangeChanged(HasData<myObject> display) {
final Range range = display.getVisibleRange();
int start = range.getStart();
int end = start + range.getLength();
List<myObject> dataInRange = myList.subList(start, end);
// Push the data back into the list.
setRowData(start, dataInRange);
}
这工作正常,当新数据从服务器到达时刷新表..但是......它跳转到我显示的表的第一页,无论他当前页面(页面大小= 20)。它就像是忽略了onRangeChanged方法的start和dataInRange值
句子:setRowData(myList);
正确触发DataProvider的onRangeChanged事件,但有些'start'值如何获得0
有提示吗?非常感谢
问题是当你调用setRowData(myList);
时你也改变了行范围。
设置要在一个页面上显示的完整值列表。
等效于使用值列表的长度调用setRowCount(int),setVisibleRange(Range)从0到值列表的大小,以及setRowData(int,List),其起始值为0,指定的值列表。
从字面上看,下面是实施:
public final void setRowData(List<? extends T> values) {
setRowCount(values.size());
setVisibleRange(0, values.size());
setRowData(0, values);
}