AsyncTask
используется для выполнения некоторых фоновых вычислений и публикации результата в потоке пользовательского интерфейса (с необязательными обновлениями прогресса). Поскольку вас не интересует пользовательский интерфейс, тогда Handler
или Thread
кажется более подходящим.
Вы можете создавать фон Thread
и передавать сообщения обратно в основной поток, используя метод Handler
post
.
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;
}
}
}
Я не уверен, что вы имеете в виду под выбранными листьями. Если вы имеете в виду, что выбрано в представлении, вы можете узнать это, вызвав Viewer.getSelection (). Метод выбора, который вы реализуете в своем фильтре, передает в средство просмотра, родительский элемент и лист. Вы должны иметь возможность использовать эту информацию, чтобы решить, выбран ли лист или нет, и отфильтровать их. Если вы можете дать дополнительную информацию, я, вероятно, смогу ответить более подробно.
вы можете узнать это, вызвав Viewer.getSelection (). Метод выбора, который вы реализуете в своем фильтре, передает в средство просмотра, родительский элемент и лист. Вы должны иметь возможность использовать эту информацию, чтобы решить, выбран ли лист или нет, и отфильтровать их. Если вы можете дать дополнительную информацию, я, вероятно, смогу ответить более подробно. вы можете узнать это, вызвав Viewer.getSelection (). Метод выбора, который вы реализуете в своем фильтре, передает в средство просмотра, родительский элемент и лист. Вы должны иметь возможность использовать эту информацию, чтобы решить, выбран ли лист или нет, и отфильтровать их. Если вы можете дать дополнительную информацию, я, вероятно, смогу ответить более подробно.Да, если вы не отфильтруете узлы ветвления, они будут показываться, даже если в нем нет листьев. Если вы хотите, чтобы фильтр был включен постоянно, вы можете рассмотреть возможность использования ITreeContentProvider в качестве фильтра.
Поскольку у поставщика контента есть методы getChildren () и hasChildren (), у вас немного больше контроля.