4

を拡張するビューを使用する Eclipse プラグインがありますViewPartViewPartを必要とするsaveStateメソッドがありますIMemento

コードをsaveState対応するinitメソッドに追加したところ、機能しました。残念ながら、saveStateワークスペース全体がシャットダウンしている場合にのみ呼び出されます。私の見解はそれほど重要ではないので、常に開かれていると期待できます。したがって、saveStateビューを閉じるときに呼び出されると便利です。

ビューの閉鎖に反応する手段としてビューパーツリスナーを見つけましたが、得られないのはどこからIMemento来たのかです。ワークスペースの閉鎖で使用される memento オブジェクトはどこで取得できますか? initまたは、ビューが (再) 開かれた場合にビュー部分がメソッドでそれを使用するようにするには、独自の memento オブジェクトをどこに保存する必要がありますか?

@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- ビューが閉じるたびにそれを呼び出すようにビューに伝えることはできますか?

4

3 に答える 3

4

Eclipse FAQでこの質問を見てください。

ビュー ステートの保存は、ワークベンチ セッション間またはビューの呼び出し間で設定を保存するかどうかに応じて、2 つの一般的な方法で行われます。これらの機能の最初のものは、IViewPart で直接見つかります。ワークベンチがシャットダウンされると、開いているすべてのビューでメソッド saveState が呼び出されます。

ビュー ステートを永続化するもう 1 つのメカニズムは、JFace IDialogSettings 機能です。ビューの保存/初期化メカニズムに対するダイアログ設定の利点は、設定を永続化するタイミングを制御できることです。saveState メソッドは、ワークベンチのシャットダウン時にビューが開いている場合にのみ呼び出されるため、ユーザーがビューを閉じたときにビューの状態を保存するのには役立ちません。一方、ダイアログの設定はいつでも変更して保持できます。

設定メカニズムについては、この他の質問またはEclipseのドキュメント自体に移動してください。

于 2012-04-23T11:13:33.547 に答える
2

これは「少し」醜いかもしれませんが、他に何も思い浮かびませんでした。memento変数をフィールド変数として保存し、init(IViewSite site, IMemento memento)メソッドで初期化し、オーバーライドして明示的dispose()に呼び出します。saveState(IMemento memento)

于 2012-02-27T22:49:56.443 に答える
0

org.eclipse.core.runtime.Plugin.getStateLocation()いつでも自分の XMLMemento を読み書きできます。@BelaViser が述べたように、IViewPart#dispose()メソッドにファイルを記述し、ビュー コンストラクターで読み取ることができます。

于 2012-03-05T21:39:14.890 に答える