列表 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 像卡片一样显示在顶部