列表 CellTable/ Pager 顶部的特定元素

Posted

技术标签:

【中文标题】列表 CellTable/ Pager 顶部的特定元素【英文标题】:Specific element on top oflist CellTable/ Pager 【发布时间】:2012-06-12 08:17:18 【问题描述】:

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

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

我尝试了什么:

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

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

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

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

【问题讨论】:

【参考方案1】:

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

如果您使用不同类型的数据提供者,您可能必须自己致电 CellTable.redraw,但我认为 AbstractDataProvider 会为您处理好。

作为调查的第一步,您可以在新事件被记录后尝试致电cellTable.redraw(),看看是否能帮到您。

【讨论】:

可以工作,但我的数据已排序,所以我无法控制顺序,只是将我想要显示在列表顶部的元素。但是我找到了一个解决方案并感谢您的想法:)【参考方案2】:

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

【讨论】:

以上是关于列表 CellTable/ Pager 顶部的特定元素的主要内容,如果未能解决你的问题,请参考以下文章

GWT CELLTABLE pager 如何判断用户点击了哪个按钮?

使用 SimplePager 进行 CellTable 分页

查看 Pager Transformation 像卡片一样显示在顶部

将自定义样式附加到 GWT CellTable(在本例中为所有单元格)

在列表顶部查找并移动特定项目

如何将特定记录放在列表顶部