Eclipse plugin Eclipse在视图关闭时调用ViewPart saveState
我有一个Eclipse插件,它使用一个扩展了Eclipse plugin Eclipse在视图关闭时调用ViewPart saveState,eclipse-plugin,savestate,memento,Eclipse Plugin,Savestate,Memento,我有一个Eclipse插件,它使用一个扩展了ViewPart的视图ViewPart有一个saveState方法,该方法需要IMemento 我将我的代码添加到saveState和相应的init方法中,它就工作了。不幸的是,只有在整个工作区关闭时才会调用saveState。我的观点并不是那么重要,我可以期待它一直被打开。因此,如果在视图关闭时调用saveState,那就太酷了 我发现一个视图部分监听器对视图闭包做出了反应,但我没有得到的是IMemento的来源。在哪里可以获得用于工作区闭包的mem
ViewPart
的视图ViewPart
有一个saveState
方法,该方法需要IMemento
我将我的代码添加到saveState
和相应的init
方法中,它就工作了。不幸的是,只有在整个工作区关闭时才会调用saveState
。我的观点并不是那么重要,我可以期待它一直被打开。因此,如果在视图关闭时调用saveState
,那就太酷了
我发现一个视图部分监听器对视图闭包做出了反应,但我没有得到的是IMemento
的来源。在哪里可以获得用于工作区闭包的memento对象?或者,如果视图(重新)打开,我必须在何处存储我自己的memento对象,以使视图部件在init
方法中使用它
这是我的
saveState
-我能告诉我的视图在每次视图关闭时调用它吗?好吧,这可能“有点”难看,但我没有想到其他事情:将memento变量存储为字段变量,在init(IViewSite site,IMemento memento)中初始化它方法,重写dispose()
并明确地调用saveState(IMemento memento)
。您可以随时从org.eclipse.core.runtime.Plugin.getStateLocation()读取和编写自己的XMLMemento。正如@BelaViser所提到的,您可以用IViewPart#dispose()
方法编写文件,并在视图构造函数中读取它。在Eclipse常见问题解答中查看这一点:
存储视图状态有两种常用方式,具体取决于
您希望在工作台会话之间或跨会话存储设置
调用您的视图。第一个这样的设施被发现了
直接在IViewPart上。当工作台关闭时,方法
对所有打开的视图调用saveState
另一种持久化视图状态的机制是JFace
IDialogSettings设施。对话框设置相对于
view save/init机制是您可以控制何时更改设置的机制
坚持。仅当视图处于打开状态时,才会调用saveState方法
当工作台关闭时,它对存储视图没有用处
用户关闭视图时的状态。对话框设置,位于
另一方面,可以随时更改和保持
对于设置机制,请转到“其他”或“自身”。能否提供您的保存状态方法刚刚遇到此问题,我得出结论,对于保存视图的状态,对话框设置效果最好,将记忆留给工作台保存视图大小,DialogSettings是从插件中简单检索的:Activator.getDefault().getDialogSettings()<在处置小部件
后,可能会调用视图
的code>dispose()
,导致出现org.eclipse.swt.swt异常
:小部件在试图保存这些小部件的状态时被处置
@Override
public void saveState(IMemento memento) {
super.saveState(memento);
memento = memento.createChild(MEMENTO_GUI_STATE);
memento.putBoolean(MEMENTO_IS_FLAT, !isHierarchicalModeActive());
memento.putBoolean(MEMENTO_IS_CATEGORY_MODE_ACTIVE, comboViewer.isVisible());
}