【问题标题】:Eclipse call ViewPart saveState on View closeEclipse 在视图关闭时调用 ViewPart saveState
【发布时间】:2012-03-17 08:30:31
【问题描述】:

我有一个 Eclipse 插件,它使用扩展 ViewPart 的视图。 ViewPart 有一个 saveState 方法,它需要一个 IMemento

我将我的代码添加到 saveState 和相应的 init 方法中,它可以工作。不幸的是,saveState 仅在整个工作区关闭时才被调用。我的观点并不是那么重要,以至于我可以期望它一直被打开。因此,如果在视图关闭时调用 saveState 会很酷。

我发现一个视图部分侦听器意味着对视图关闭做出反应,但我没有得到IMemento 的来源。我在哪里可以获得用于工作区关闭的纪念品对象?或者如果视图被(重新)打开,我必须在哪里存储我自己的纪念品对象以使视图部分在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 - 我可以告诉我的视图以某种方式告诉每次视图关闭时调用它吗?

【问题讨论】:

  • 能否请您提供您的 saveState 方法

标签: eclipse-plugin savestate memento


【解决方案1】:

查看 Eclipse 常见问题解答中的 question

存储视图状态有两种常见的方式,取决于是否 您想在工作台会话之间或跨 调用您的视图。这些设施中的第一个被发现 直接在 IViewPart 上。当工作台关闭时,方法 在所有打开的视图上调用 saveState。

另一种保持视图状态的机制是 JFace IDialogSettings 工具。对话设置优于 查看保存/初始化机制是您可以控制何时设置 坚持。仅当您的视图打开时才调用 saveState 方法 当工作台关闭时,因此对存储视图没有用处 用户关闭视图时的状态。对话框设置,在 另一方面,可以随时更改和保留。

转到另一个questionEclipse documentation 本身以了解设置机制。

【讨论】:

  • 刚刚遇到这个问题,我得出的结论是,对于保存视图的状态,DialogSettings 效果最好,将纪念品留给 Workbench 保存视图大小、位置等。DialogSettings 很简单从插件中检索:Activator.getDefault().getDialogSettings();
【解决方案2】:

好吧,这可能“有点”难看,但我没有想到其他任何事情:将 memento 变量存储为字段变量,在您的 init(IViewSite site, IMemento memento) 方法中对其进行初始化,覆盖 dispose() 并显式调用 saveState(IMemento memento)

【讨论】:

  • Viewdispose() 可能会在Widgets 被释放后被调用,从而导致org.eclipse.swt.SWTException: Widget 在尝试保存这些小部件的状态时被释放跨度>
【解决方案3】:

您可以随时从您的org.eclipse.core.runtime.Plugin.getStateLocation() 读取和写入您自己的 XMLMemento。正如@BelaViser 提到的,您可以在IViewPart#dispose() 方法中编写文件并在视图构造函数中读取它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多