我有一个Eclipse插件,它使用扩展ViewPart
的视图。 ViewPart
有saveState
方法,需要IMemento
。
我将代码添加到saveState
以及相应的init
方法,但它确实有效。不幸的是,只有在整个工作区正在关闭时才会调用saveState
。我的观点并不是那么重要,以至于我可以期待它一直被打开。因此,如果在视图闭包上调用saveState
,那将会很酷。
我发现一个视图部分监听器是对视图闭包做出反应的意思,但我没有得到的是IMemento
的来源。我在哪里获得工作区关闭时使用的memento对象?或者,如果(重新)打开视图,我必须在哪里存储我自己的memento对象以使视图部分在init
方法中使用它?
@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());
}
这是我的saveState
- 我可以告诉我的观点以某种方式告诉每次视图关闭时调用它吗?
答案 0 :(得分:4)
在Eclipse FAQ中查看此question:
存储视图状态是以两种方式完成的,具体取决于是否 您希望在工作台会话之间存储设置 调用你的观点。找到了第一个这样的设施 直接在IViewPart上。当工作台关闭时,该方法 在所有打开的视图上调用saveState。
持久化视图状态的另一种机制是JFace IDialogSettings设施。对话框设置优于 查看保存/初始化机制是您可以控制何时进行设置 持续存在。仅当视图处于打开状态时才会调用saveState方法 当工作台关闭时,它对存储视图没有用 当用户关闭视图时的状态。对话框设置,在 另一方面,可以随时更改和保留。
转到其他question或Eclipse documentation本身获取设置机制。
答案 1 :(得分:2)
这可能有点“丑陋”,但我没想到:将memento变量存储为字段变量,在init(IViewSite site, IMemento memento)
方法中初始化,覆盖dispose()
并调用{{1明确地说。
答案 2 :(得分:0)
您可以随时从org.eclipse.core.runtime.Plugin.getStateLocation()
读取和编写自己的XMLMemento。正如@BelaViser所提到的,您可以在IViewPart#dispose()
方法中编写文件,并在视图构造函数中阅读它。