2012-07-08 91 views
0

我有一个扩展了CommonNavigator的视图。查看扩展CommonNavigator

我正在通过CustomProjectCreation向导创建自定义项目。

只有刷新下面的作品给出,但它刷新所有项目应该避免的一个新项目,每次创建,

CommonNavigator resNav; 
try { 
resNav = (CommonNavigator)activePage.findView("view id"); 
resNav.getCommonViewer().refresh(); 
//resNav.getCommonViewer().refresh(newProject); //doesn't work 
} catch (PartInitException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} 

ContentProvider looks as below 
if(parentElement instanceof IWorkspaceRoot){ 
List customProjects = getCustomProjects(); 
return customProjects.toArray(new CustomProject[customProjects.size()]); 
} 

上进行调试,getCommonViewer()。刷新()调用的getChildren( )方法在内容提供者中。 getCommonViewer()刷新(newProject)不会对ContentProvider的

expandtolevel和setExpandedState一个电话都没有工作...

如何实现在特定刷新到新创建的项目? 如何扩展创建的项目?

问候, 亚拉文

+0

你还有org.eclipse.ui.navigator.resources插件吗?这提供了一些东西来监听资源更改事件,并确保ProjectExplorer与这些事件同步。我不记得如何将它与您自己的CommonNavigator挂钩,但我认为这是一种方法。 – 2012-07-12 07:08:10

回答

1

你确定这个问题是在普通导航仪?如果您已经通过使用非Eclipse资源访问方法(这是普通的Java文件IO而不是IResource,IFile和相关代码)在新项目中创建了工件,那么该模型并不知道新内容。如果是这种情况,您首先需要yourProjectResource.refreshLocal()

+0

我正在创建包含IFile的IProject。但在我的内容提供者中,创建的项目被包装在返回的模型对象(新CustomProject(IProject))上。这是否会成为普通导航器无法检测到新内容的原因? – Aravind 2012-07-09 04:01:27

+0

是的,这就是原因,CNF将跟踪资源变化,但由于它不知道模型对象,资源变更机制不会帮助你。您必须访问CommonViewer并在模型对象更改时自行刷新对象。 – 2012-07-18 22:58:24