Search code examples
gwttreecelldataprovider

How to re-render a specific node in gwt cell tree


I am implementing a directory structure like Windows Explorer. I want to re-render a specific node of tree after any folder operations is done such as add folder, remove folder... etc

private ListDataProvider<Object> dataProvider= new ListDataProvider<Object>();

private Object current;//store object of currentNode;

private Map<Object, ListDataProvider<Object>> keyprovider =
    new HashMap<Object,ListDataProvider<Object>>();

private CellTree tree;

// keeps a map for storing dataproviders in each hierarchy , 

public void setListToCurrentNode(List<Object> newList){

    //adding this newlist to current data provider not reflecting to display
    keyprovider.get(currentObject).setList(newList);

}

public void onModuleLoad(){

    treeSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {

        public void onSelectionChange(SelectionChangeEvent event) {

            //setting current object as selected  node
            current = treeSelectionModel.getSelectedObject();

        }
    });

}

Solution

  • Solved by Changing Listdataprovider into AsyncDataProvider ,Implementation is below

    private final class DataProvider extends AsyncDataProvider<Object> {
    
        private Object value;
                private List Objs;
    
        DataProvider(Object value) {
            this.value = value;
        }
    
    
        public void update(List objs) {//Call update when you wanted to refresh tree
                       this.objs=objs;
            for (HasData<Object> disp : getDataDisplays()) {
                this.onRangeChanged(disp);
                break;
            }
        }
    
        @Override
        protected void onRangeChanged(final HasData<Object> display) {
    
                                        updateRowData(0, objs);
                    updateRowCount(objs.size(), true);
    
               }