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 以编程方式“显示更多”的主要内容,如果未能解决你的问题,请参考以下文章

iOS:以编程方式在以编程方式创建的滚动视图中创建标签

如何以编程方式向以编程方式创建的 UIView 添加约束?

Android 编程:如何以网格方式以编程方式创建各种视图类型

iOS9:在另一个以编程方式添加的视图中居中以编程方式添加的视图

如何以编程方式添加标签并以编程方式使用自动布局定位它

以编程方式获取 Android 手机型号,如何在 android 中以编程方式获取设备名称和型号?