0

ツリーの特定の要素が展開されている場合にデータをフェッチしたい。

public void treeExpanded(TreeExpansionEvent event) {  
   Object element = event.getElement();
   if (element instanceof MyClass) {
      fetch.......
   }
} 

問題は、コンテンツ プロバイダーgetChildren()が treeExpanded() メソッドの前にトリガーするように見えるNullPointerExceptionため、要素を展開するたびに取得されることです。これは、コンテンツ プロバイダーが決してフェッチされないデータを使用しようとするためです。どうすればこれを適切に解決できますか?

4

2 に答える 2

2

getChildren()コードは、 andtreeExpanded()が呼び出される順序に依存してはなりません。これは の実装の詳細でありTreeViewer、将来変更される可能性があります。

getChildren()またはinputChanged()コンテンツ プロバイダで表示する要素を取得します。

UI スレッドでのフェッチ操作の実行に時間がかかりすぎる場合は、バックグラウンド スレッドで実行し、フェッチ操作が完了したら、置き換えられるプレースホルダー要素を返します。例については、DeferredTreeContentManagerのを参照してくださいorg.eclipse.ui

または、JFaceDeferredContentProviderがニーズに合っているかどうかを確認することもできます。

于 2015-07-13T15:57:19.580 に答える
1

はい、イベントが発生getChildrenする前にコンテンツ プロバイダーが呼び出されます。treeExpandedこのイベントを使用してツリーを作成することはできません。

ツリーの一部の取得を遅らせたい場合は、SWT.VIRTUALフラグとILazyTreeContentProviderコンテンツ プロバイダーを使用してツリーを確認する必要があります。

于 2015-07-13T15:31:42.770 に答える