2016-04-07 4 views
0

最初にStackOverflowのIStructuredSelectionについて他のトピックをチェックしましたが、問題は解決しません。異なるViewPartsのJava Eclipse IStructuredSelectionがnullを返します

私は2つのビューを持っています。私はTreeViewerを持っていると私はTreeNodeをクリックしたときMAINVIEWではすべてが、正しく動作しているgetSite().setSelectionProvider(viewer);

を実施し、両方のビューで(注:■カスタムクラスからですこれらTreeNode」、myTreeNodeを言うことができます)PropertiesView取得更新され、私のポップアップmenuは異なるハンドラで正しい関数を呼び出します。

これらの関数のいずれかは、別のViewに新しいTreeItemを作成し、異なる列に値を表示する必要があります。これらの値は毎秒更新されます。この部分も正しく動作しています。

しかし、今問題が発生します。 TreeItemのいずれかをクリックすると、PropertiesViewが更新されず、ポップアップメニューハンドラも正しく動作しません。 IStructuredSelection strucSelection = (IStructuredSelection) selection;は常にnullを返します。ここで

PropertiesViewのための私のアダプタからの私getAdapter方法です:

@Override 
public Object getAdapter(Object adaptableObject, Class adapterType) 
{ 
    if(adapterType == IPropertySource.class && adaptableObject instanceof UATreeNode) 
     return new UATreeNodeAdapter((UATreeNode) adaptableObject); 
    else if(adapterType == IPropertySource.class && adaptableObject instanceof TreeItem) 
    { 
     MainView.printOnOPCUAConsole(OPCUAConsoleMessageTypeEnum.NULL, "Instanceof TreeItem"); 
     return new TreeItemAdapter((TreeItem) adaptableObject); 
    } 
    else if(adapterType == IPropertySheetPage.class) 
    { 
     if(propertyPage == null) 
      propertyPage = new PropertySheetPage(); 
     return propertyPage; 
    } 
    return null; 
} 

そしてここでは、2番目のビューでmenuがオープンしまして、コマンドが実行されると、呼び出されなければなりません私のHandler、あります

どちらの場合も、選択はnullですが、何かが選択されていることがわかります。それ以外の場合は、popup menuは表示されません。

今私の質問は、誰も私の秒から選択を得る方法を知っていますView?そして私は何が間違っているのですか?

+0

これは、2番目のビューの 'setSelectionProvider'呼び出しに何か問題があるか、あるいは何か他のものがアクティブな部分であることを示唆しています。 –

+0

2番目のビューでは、treeViewerを 'setSelectionProvider'に渡します。 2番目のビューにフォーカスが当たったとき、ビューアの最初の要素は常に「自動選択」され、私の「SelectionChangedListener」は起動されることが認識されました。しかし、私は 'event.getSelection();'がnullを返すという同じ問題を抱えています。 – Strizzi

答えて

0

私は自分自身の要素を実装することでこの問題を解決し、ContentProviderを介してTreeViewerに提供しました。 次に、adapter-extensionの新しいadaptableType(新しい作成クラス)をplugin.xmlに追加し、adapter-factoryに新しいClassを追加しました。

関連する問題