2014-09-29 106 views
0

我有一個插件,該視圖根據在所選項目中找到的不同文件(該工作空間有多個項目加載)創建一個tableviewer。我的問題是,當我嘗試重新加載視圖時,信息與Eclipse啓動後第一次運行時保持不變。重新加載Eclipse視圖

我應該怎麼做才能重新加載內容提供程序,每次我重新加載視圖?

+0

向我們展示如何重新加載視圖 – 2014-09-29 06:50:48

+0

Window-> Show View-> View Name,我的意思是這個重新加載不與viewer.setInput (contentProvider) – 2014-09-29 06:52:16

回答

1

要被告知哪個部件處於活動狀態,您需要使用IPartListener2。讓您的ViewPart實現IPartListener2

設置聽者在createPartControl

@Override 
public void createPartControl(final Composite parent) 
{ 
    .... 

    getSite().getWorkbenchWindow().getPartService().addPartListener(this); 
} 

dispose刪除監聽器:

@Override 
public void dispose() 
{ 
    super.dispose(); 

    ... 

    getSite().getWorkbenchWindow().getPartService().removePartListener(this); 
} 

你將不得不實行IPartListener的各種方法,大多數這些並不需要做任何事情,partVisible方法在您的視圖(或任何其他部分)顯示時調用:

@Override 
public void partVisible(final IWorkbenchPartReference ref) 
{ 
    if (ref.getId().equals("your view id")) 
    { 
    // Your view has become visible ... add code here to update the table 
    } 
} 
+0

仍然不起作用,似乎一旦視圖從窗口選項加載,它只使用當時選擇的項目..... – 2014-09-29 08:41:12

+0

你將不得不找出新的選擇是在部分可見 – 2014-09-29 08:41:44

+0

你是什麼意思? :) – 2014-09-29 09:01:18

0

這是我partVisible的樣子:

public void partVisible(IWorkbenchPartReference partRef) { 
    // TODO Auto-generated method stub 
    if (partRef.getId().equals("view id taken from extensions")) 
     { 

     getWorkspacePath(); 
     viewer.remove(TableContent.INSTANCE.getRow()); 
     viewer.setInput(TableContent.INSTANCE.updateContentProvider()); 
     viewer.refresh(); 

     } 
} 

的路徑更新(我已經在視圖中顯示的路徑),但該表的內容是不是.... updateContentProvider包含調用需要解析所選項目中的某些文件的功能....

+0

您是否檢查過CableContent.INSTANCE.updateContentProvider()函數是否正確執行更新? – DrKaoliN 2014-09-30 08:33:28

+0

是的,它的確,我使用這個功能來刷新按鈕也.... – 2014-09-30 12:31:11