0

是否可以在列表顶部有一个特定元素?

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

我尝试了什么:

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

这混淆了整个寻呼机逻辑,用户不能再从寻呼机切换到页面。

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

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

4

2 回答 2

1

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

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

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

于 2012-06-12T15:59:42.703 回答
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 告诉单元格表,显示哪些数据以及这些数据从哪个位置开始。

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

        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());
于 2012-06-13T07:45:44.937 回答