2014-09-29 105 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