列表CellTable / Pager之上的特定元素

时间:2012-06-12 08:17:18

标签: gwt pager celltable

是否可以在列表顶部放置特定元素?

backgoround: 我有一个活动应用程序,不断添加新事件。事件按日期排序。如果事件通过,它仍然在页面顶部。现在一段时间过去了,第一个元素全部结束,因此第一个分页不再显示任何necassery数据。要获得将要发生的事件,用户必须单击寻呼机按钮。 我希望这些事件显示在顶部,如果用户想要查看以前的事件,他必须单击寻呼机的后退按钮。

我尝试了什么:

cellTable.setVisibleRange(overElements, (overElements + totalEementCount));

这混合了整个寻呼机逻辑,用户无法再从寻呼机切换到页面。

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

这会选择正确的元素,并将寻呼机移动到它,但其他元素仍然可见,所以如果我有一些“结束”事件,而在最坏的情况下,只有一个“通过”事件表。此外,可用性也很糟糕,因为用户必须查看下一个事件并且没有它在页面顶部...

2 个答案:

答案 0 :(得分:1)

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

如果您使用的是其他类型的数据提供者,则可能需要自己致电CellTable.redraw,但我认为AbstractDataProvider会为您解决此问题。

作为第一个调查步骤,您可能只是在记录新事件后尝试调用cellTable.redraw()以查看是否可以将您带到任何地方。

答案 1 :(得分:0)

找到了解决方案: 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);

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());