Os controles listview e treeview do javafx não são repintados corretamente

Eu estou tentando colocar elementos em um listview e treeview com javafx, mas ambos os controles não atualizará seu conteúdo. Eu estou usando uma lista obvservable para controlar os itens e toda vez que eu excluir um item, o listview ou treeview remove-lo da fonte de dados. mas a vista não está atualizando. Ainda estou vendo todos os itens. A única diferença é que o item removido não pode mais ser selecionado. por exemplo, o link 2 mostra a lista de itens recolhidos. A imagem 1 mostra os itens antes de serem colados. os itens são recolhidos, mas a input antiga ainda é visível. Alguém sabe uma solução para este problema. obrigado a todos por me ajudarem

link 1: treeview não é recolhido link 2: treeview é recolhido mas não atualiza a visão antiga

esta é a fábrica de células personalizadas que eu uso para exibir um listview:

public ListCell call(final ListView param) { ListCell cell = new ListCell(){ @Override protected void updateItem(final T persistentObject, final boolean empty) { super.updateItem(persistentObject, empty); if(persistentObject instanceof POProcessStep){ POProcessStep poProcessStep = (POProcessStep) persistentObject; if (persistentObject != null) { super.setText(poProcessStep.getId() + " - " + poProcessStep.getTitle()); } }else if(persistentObject instanceof POProcess){ POProcess poProcess = (POProcess) persistentObject; if (persistentObject != null) { super.setText(poProcess.getId() + " - " + poProcess.getTitle()); } }else if(persistentObject instanceof POCategory){ POCategory poCategory = (POCategory) persistentObject; if(persistentObject != null){ super.setText(poCategory.getId() + " - " + poCategory.getTitle()); } }else if(persistentObject instanceof String){ if(persistentObject != null){ super.setText(String.valueOf(persistentObject)); } } super.setGraphic(null); } }; return cell; } 

    O updateItem(...) sua fábrica de updateItem(...) precisa lidar com o caso em que a célula está vazia. Esse será exatamente o cenário em que um item é removido (ou fica vazio porque um nó no TreeView foi recolhido) e a célula que mostrava um item anteriormente é reutilizada como uma célula vazia:

     public ListCell call(final ListView param) { ListCell cell = new ListCell(){ @Override protected void updateItem(final T persistentObject, final boolean empty) { super.updateItem(persistentObject, empty); if (empty) { setText(null); setGraphic(null); } else { // ... rest of your code. } } } return cell ; }