CellTree 以编程方式“显示更多”
Posted
技术标签:
【中文标题】CellTree 以编程方式“显示更多”【英文标题】:CellTree "Show More" programmatically 【发布时间】:2013-02-01 11:20:14 【问题描述】:有谁知道如何以编程方式触发 GWT CellTree 的“显示更多”功能,而无需单击“显示更多”按钮?
我的目标是实现一种寻呼机,当用户向下滚动 ScollPanel 时,它会增加显示的元素数量,所以它是这样的:
//inside pager class
onScroll(ScrollEvent)
//here I would call CellTree's show more
我一直在查看 CellTree 和 CellTreeNodeView 类的代码,但找不到明确的方法。
我知道 CellTreeNodeView 类有一个 showMore 函数,它是执行此操作的函数,但我不知道如何从另一个类调用它。我需要一个 CellTreeNodeView 对象,但不知道如何获取它。
谢谢!
【问题讨论】:
你可以查看这个:***.com/questions/3129104/… 【参考方案1】:它是包保护类 CellTreeNodeView 中的包保护方法,即只有 com.google.gwt.user.cellview.client 中的代码可以调用它。
void showMore()
非常老套的解决方案
1) 解决它的唯一方法是 .将 CellTreeNodeView 和 CellTree 复制到您的代码库中(维护包)
2) 将 accessors 更改为 public,以便您根据需要调用 showMore。
3) 确保您测试所有可能的流程。
4) 确保代码库中复制的类出现在 GWT 编译器比 gwt-user jar 更高的类路径层次结构中,从而确保获取修改后的类而不是原始类。
【讨论】:
【参考方案2】:最后我让它完全按照我的意愿工作,而无需从受保护的原始 GWT 中复制代码。
重点是触发与“显示更多”按钮相同的事件,所以我创建了一个假的 onMouseDown 事件,并以显示更多按钮作为目标来触发它:
final ScrollPanel sp = new ScrollPanel();
sp.addScrollHandler(new ScrollHandler()
@Override
public void onScroll(ScrollEvent event)
int maxScrollBottom = sp.getWidget().getOffsetHeight()
- sp.getOffsetHeight();
if (sp.getVerticalScrollPosition() >= maxScrollBottom)
NativeEvent clickEvent = Document.get().createMouseDownEvent(0,0,0,0,0,false,false,false,false,0);
Element target = (Element) cellTree.getCellTree().getElement().getLastChild().getFirstChild().getLastChild();
target.dispatchEvent(clickEvent);
);
无论如何,非常感谢! :D
【讨论】:
【参考方案3】:我的解决方法是这个:
public static void makeShowMoreVisible(Element element, boolean isVisible)
ArrayList<Element> result = new ArrayList<Element>();
findShowMore(result, element);
for (Element elt : result)
if (isVisible)
element.getStyle().clearDisplay();
else
element.getStyle().setDisplay(Display.NONE);
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);
【讨论】:
以上是关于CellTree 以编程方式“显示更多”的主要内容,如果未能解决你的问题,请参考以下文章
Android 编程:如何以网格方式以编程方式创建各种视图类型