2011-12-15 9 views
3

私は最初のEclipseプラグインを開発しています。そのために私は単純な見方をした例を使用しました。 IStructuredContentProviderを追加して、コンテンツにビューを提供しました。初めて読み込まれたときに動作しますが、コンテンツを変更したときにはビューは更新されません。私は何をすべきか?Eclipseプラグインの開発:コンテンツが変更されたことをビューに通知する方法

これは私の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(); 
    } 
} 

答えて

4

これはinputChanged()方法の説明からさ:

この方法のための典型的な使用は、新しい上の変更に対するリスナーとして、コンテンツプロバイダを登録しています(モデル固有の手段を使用して)入力し、古い入力からビューアの登録を解除する。これらの変更通知に応じて、コンテンツプロバイダはビューアを更新する必要があります(ビューアの追加、削除、更新、および更新の方法を参照してください)

+0

はい私もそれを発見しましたが、このメソッドではsysoutを実行するときに、コンテンツプロバイダに新しい項目を追加するときに呼び出されません。 – RoflcoptrException

+0

@Roflcoptr viewer.setInput()を呼び出すと、inputChanged()が呼び出されます。これは視聴者への参照を得るチャンスです。コンテンツに後で変更を加えると、たとえば、 viewer.refresh()をプロバイダから取得します。 –

+0

ああ、私は参照してください。ありがとう。 – RoflcoptrException

関連する問題