Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Eclipse插件开发:如何通知视图内容已更改?_Java_Eclipse_Eclipse Plugin_Jface - Fatal编程技术网

Java Eclipse插件开发:如何通知视图内容已更改?

Java Eclipse插件开发:如何通知视图内容已更改?,java,eclipse,eclipse-plugin,jface,Java,Eclipse,Eclipse Plugin,Jface,我正在开发我的第一个Eclipse插件。为此,我使用了一个具有简单视图的示例。我添加了一个IStructuredContentProvider来为视图提供内容。第一次加载时,它可以工作,但当我更改内容时,视图不会更新。我该怎么办 这是我的IStructuredContentProvider: public class ViewContentProvider implements IStructuredContentProvider { private List<Project&g

我正在开发我的第一个Eclipse插件。为此,我使用了一个具有简单视图的示例。我添加了一个IStructuredContentProvider来为视图提供内容。第一次加载时,它可以工作,但当我更改内容时,视图不会更新。我该怎么办

这是我的IStructuredContentProvider:

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()。