Java Eclipse插件开发:如何通知视图内容已更改?
我正在开发我的第一个Eclipse插件。为此,我使用了一个具有简单视图的示例。我添加了一个IStructuredContentProvider来为视图提供内容。第一次加载时,它可以工作,但当我更改内容时,视图不会更新。我该怎么办 这是我的IStructuredContentProvider:Java Eclipse插件开发:如何通知视图内容已更改?,java,eclipse,eclipse-plugin,jface,Java,Eclipse,Eclipse Plugin,Jface,我正在开发我的第一个Eclipse插件。为此,我使用了一个具有简单视图的示例。我添加了一个IStructuredContentProvider来为视图提供内容。第一次加载时,它可以工作,但当我更改内容时,视图不会更新。我该怎么办 这是我的IStructuredContentProvider: public class ViewContentProvider implements IStructuredContentProvider { private List<Project&g
public class ViewContentProvider implements IStructuredContentProvider {
private List<Project> projects = new ArrayList<Project>();
private void addProject(Project project) {
if (!projects.contains(project)) {
projects.add(project);
}
}
public void addProjects(List<Project> projects) {
for (Project project : projects) {
addProject(project);
}
}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
@Override
public void dispose() {
}
@Override
public Object[] getElements(Object parent) {
return projects.toArray();
}
}
公共类ViewContentProvider实现IStructuredContentProvider{
private List projects=new ArrayList();
私人项目(项目){
如果(!projects.contains(项目)){
项目。添加(项目);
}
}
公共项目(列出项目){
用于(项目:项目){
addProject(项目);
}
}
@凌驾
public void inputChanged(查看器、对象oldInput、对象newInput){
}
@凌驾
公共空间处置(){
}
@凌驾
公共对象[]getElements(对象父对象){
return projects.toArray();
}
}
这是对inputChanged()
方法的描述:
此方法的典型用途是将内容提供程序注册为新输入更改的侦听器(使用特定于模型的方法),并从旧输入中取消对查看器的注册。为响应这些更改通知,内容提供商应更新查看器(请参阅查看器上的添加、删除、更新和刷新方法)
是的,我也发现了,但是当我在这个方法中执行sysout时,当我向内容提供程序添加新项目时,它不会被调用。@Roflcoptr inputChanged()在调用viewer.setInput()时被调用。这是您获取对查看器的引用的机会,这样当您以后更改内容中的某些内容时,您可以从提供程序调用例如viewer.refresh()。