GWT 的CellBrowser是呈现动态数据的好方法。
但是,当浏览器包含的行数超过某个(看似)任意最大值时,它会提供一个“显示更多”标签,用户可以单击该标签来获取看不见的行。
如何禁用此行为,并强制它始终显示每一行?
GWT 的CellBrowser是呈现动态数据的好方法。
但是,当浏览器包含的行数超过某个(看似)任意最大值时,它会提供一个“显示更多”标签,用户可以单击该标签来获取看不见的行。
如何禁用此行为,并强制它始终显示每一行?
有几种方法可以摆脱“显示更多”(您可以结合使用):
在您的TreeViewModel
,在您NodeInfo
的setDisplay
或在DataProvider
您给的DefaultNodeInfo
,在onRangeChange
:覆盖显示的可见范围为您的数据的大小。
扩展CellBrowser
并覆盖其createPager
方法以返回null
。虽然它不会改变列表的页面大小,但您也可以在那里将其设置为非常高的值。
下面的 CellBrowser 删除“显示更多”文本并加载所有可用元素而无需分页。
public class ShowAllElementsCellBrowser extends CellBrowser {
public ShowAllElementsCellBrowser(TreeViewModel viewModel, CellBrowser.Resources resources) {
super(viewModel, null, resources);
}
@Override
protected <C> Widget createPager(HasData<C> display) {
PageSizePager pager = new PageSizePager(Integer.MAX_VALUE);
// removes the text "Show More" during loading
display.setRowCount(0);
// increase the visible range so that no one ever needs to page
display.setVisibleRange(0, Integer.MAX_VALUE);
pager.setDisplay(display);
return pager;
}
}
在为 CellBrowser 的构建器设置页面大小时,我找到了一个有效且简单的解决方案。希望这会有所帮助。
CellBrowser.Builder<AClass> cellBuilder = new CellBrowser.Builder<AClass>(myModel, null);
cellBuilder.pageSize(Integer.MAX_VALUE);
cellBrowser = cellBuilder.build();
最简单的方法是使用:
cellTree.setDefaultNodeSize(Integer.MAX_VALUE);
细胞树上的方法。您必须在开始扩展树之前执行此操作。
我的解决方法是浏览treeview
dom 的元素以获取“显示更多”元素
public static List<Element> findElements(Element element) {
ArrayList<Element> result = new ArrayList<Element>();
findShowMore(result, element); return result; }
private static void findShowMore(ArrayList res, Element element) {
String c;
if (element == null) { return; }
if (element.getInnerText().equals("Show more")) { res.add(element);
}
for (int i = 0; i < DOM.getChildCount(element); i++) { Element
child = DOM.getChild(element, i); findShowMore(res, child); } }
而不是使用:
if (show) { element.getStyle().clearDisplay(); } else {
element.getStyle().setDisplay(Display.NONE); }