Gwt 列表大提琴台/传呼机顶部的特定元素

Gwt 列表大提琴台/传呼机顶部的特定元素,gwt,pager,celltable,Gwt,Pager,Celltable,有可能在列表的顶部有一个特定的元素吗 背景: 我有一个活动应用程序,不断添加新的活动。事件按日期排序。如果某个事件通过,它仍位于页面顶部。现在经过了一段时间,第一个元素已经全部结束,所以第一个页面不再显示任何必要的数据。要获得将要发生的事件,用户必须单击寻呼机按钮。 我希望此事件显示在顶部,如果用户希望看到以前的事件,他必须单击寻呼机的“后退”按钮 我试过什么: cellTable.setVisibleRange(overElements, (overElements + totalEement

有可能在列表的顶部有一个特定的元素吗

背景: 我有一个活动应用程序,不断添加新的活动。事件按日期排序。如果某个事件通过,它仍位于页面顶部。现在经过了一段时间,第一个元素已经全部结束,所以第一个页面不再显示任何必要的数据。要获得将要发生的事件,用户必须单击寻呼机按钮。 我希望此事件显示在顶部,如果用户希望看到以前的事件,他必须单击寻呼机的“后退”按钮

我试过什么:

cellTable.setVisibleRange(overElements, (overElements + totalEementCount));
这混淆了整个寻呼机逻辑,用户无法再从一个寻呼机切换到另一个页面

SingleSelectionModel<JSEvents> selectionModel = new SingleSelectionModel<JSEvents>();
...
selectionModel.setSelected(nextEvent, true);
SingleSelectionModel selectionModel=new SingleSelectionModel();
...
selectionModel.setSelected(nextEvent,true);

这将选择正确的元素,并将寻呼机移动到该元素,但其他元素仍然可见,因此如果我有几个“over”事件,在最坏的情况下,表中只有一个“comming”事件。还有一个问题是可用性很差,因为用户必须查看下一个事件,并且没有将其放在页面顶部…

如果您使用的是
列表数据提供程序,则可以将新事件添加到列表的前面。将通知依赖于该数据提供者的所有内容,并应重新绘制

如果您使用的是不同类型的数据提供程序,您可能需要自己调用
CellTable.redraw
,但我认为
AbstractDataProvider
会为您解决这个问题

作为调查的第一步,您可以在记录新事件后尝试调用
cellTable.redraw()
,看看这是否能帮您解决问题。

找到了一个解决方案: celltable有一个方法
setVisibleRange
。在涉及寻呼机的示例中使用此方法:

            int start = display.getVisibleRange().getStart();
            int end = start + display.getVisibleRange().getLength();
            end = end >= data.size() ? data.size() : end;
            List<JSEvents> sub = data.subList(start, end);
            updateRowData(start, sub);
int start=display.getVisibleRange().getStart();
int end=start+display.getVisibleRange().getLength();
end=end>=data.size()?data.size():结束;
列表子列表=数据。子列表(开始、结束);
updateRowData(开始,子节点);
updateRowData告诉celltable显示哪些数据以及这些数据从哪个位置开始

现在,如果我们想在页面顶部有一个特定的元素,我们可以使用相同的函数。这就是我最终使用它的方式:

        int end = start + PAGESIZE;
        end = (end >= data.size()) ? data.size() : end;
        List<JSEvents> sub = data.subList(start, end);

        dataProvider.updateRowData(start, sub);
        cellTable.setVisibleRange(start, sub.size());
int end=start+PAGESIZE;
end=(end>=data.size())?data.size():结束;
列表子列表=数据。子列表(开始、结束);
dataProvider.updateRowData(开始,子);
cellTable.setVisibleRange(开始,子大小());

可以工作,但我对数据进行了排序,因此我无法控制顺序,只需将要显示的元素放在列表顶部即可。不过,我找到了一个解决方案,并感谢您的想法:)