Как лучше всего использовать ViewerFilter на TreeViewer?

AsyncTask используется для выполнения некоторых фоновых вычислений и публикации результата в потоке пользовательского интерфейса (с необязательными обновлениями прогресса). Поскольку вас не интересует пользовательский интерфейс, тогда Handler или Thread кажется более подходящим.

Вы можете создавать фон Thread и передавать сообщения обратно в основной поток, используя метод Handler post.

9
задан CubeJockey 1 April 2016 в 14:11
поделиться

3 ответа

class MyFilter extends ViewerFilter{

  private boolean isLeaf(Object element){
    // implement this
  }

  private boolean isEvenLeaf(Object leaf){
    // implement this
  }

  @Override
  public boolean select(Viewer viewer, Object parentElement, Object element){
    if (isLeaf(element))
      return isEventLeaf(element);
    else {
      StructuredViewer sviewer = (StructuredViewer) viewer;
      ITreeContentProvider provider = (ITreeContentProvider) sviewer.getContentProvider();
      for (Object child: provider.getChildren(element)){
        if (select(viewer, element, child))
          return true;
      }
      return false;
    }
  }
}
13
ответ дан 4 December 2019 в 13:04
поделиться

Я не уверен, что вы имеете в виду под выбранными листьями. Если вы имеете в виду, что выбрано в представлении, вы можете узнать это, вызвав Viewer.getSelection (). Метод выбора, который вы реализуете в своем фильтре, передает в средство просмотра, родительский элемент и лист. Вы должны иметь возможность использовать эту информацию, чтобы решить, выбран ли лист или нет, и отфильтровать их. Если вы можете дать дополнительную информацию, я, вероятно, смогу ответить более подробно.

вы можете узнать это, вызвав Viewer.getSelection (). Метод выбора, который вы реализуете в своем фильтре, передает в средство просмотра, родительский элемент и лист. Вы должны иметь возможность использовать эту информацию, чтобы решить, выбран ли лист или нет, и отфильтровать их. Если вы можете дать дополнительную информацию, я, вероятно, смогу ответить более подробно.

вы можете узнать это, вызвав Viewer.getSelection (). Метод выбора, который вы реализуете в своем фильтре, передает в средство просмотра, родительский элемент и лист. Вы должны иметь возможность использовать эту информацию, чтобы решить, выбран ли лист или нет, и отфильтровать их. Если вы можете дать дополнительную информацию, я, вероятно, смогу ответить более подробно.

0
ответ дан 4 December 2019 в 13:04
поделиться

Да, если вы не отфильтруете узлы ветвления, они будут показываться, даже если в нем нет листьев. Если вы хотите, чтобы фильтр был включен постоянно, вы можете рассмотреть возможность использования ITreeContentProvider в качестве фильтра.

Поскольку у поставщика контента есть методы getChildren () и hasChildren (), у вас немного больше контроля.

1
ответ дан 4 December 2019 в 13:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: