Восстановить один вид RCP при восстановлении другого - PullRequest
0 голосов
/ 11 ноября 2011

Два представления в моем приложении должны загружать одну и ту же информацию при восстановлении состояния. Моя идея состояла в том, чтобы не сохранять его дважды, чтобы одно представление создавало другое в init или createPartControl, если оно еще не было создано. Тем не менее,

PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(...)

там не работает, так как getActivePage() возвращает null. Можно ли обойти это?

1 Ответ

2 голосов
/ 11 ноября 2011

Делегирование менеджеру или службе для загрузки / обслуживания / сохранения общего состояния.Это обеспечит инициализацию вашей информации при первом доступе.Когда представление создается, просто перейдите к менеджеру и получите информацию.Если пользователь никогда не создает экземпляр вашего представления, тогда вам никогда не приходилось выполнять дополнительную работу.

В общем случае вы не можете создать / создать одно представление при создании / активации другого представления.Eclipse не разрешит этого и будет генерировать ОШИБКИ в журнале ошибок.

РЕДАКТИРОВАТЬ:

3 стандартных образца персистентности, которые я видел, которые я использовал (и / или неправильно использовал :-):

1) Плагин должен получить свое местоположение и просто сериализовать ваше состояние там.(расположение предоставляется бесплатно, если вы подкласс org.eclipse.core.runtime.Plugin). Вы можете сделать это в вашем активаторе stop(BundleContext) метод.Вы можете использовать классы типа org.eclipse.ui.XMLMemento для сериализации в / из XML, если у вас еще нет решения.

2) если вы подклассом org.eclipse.ui.plugin.AbstractUIPlugin, вы можете использовать org.eclipse.ui.plugin.AbstractUIPlugin.getDialogSettings() для хранения своего состояния.Потенциально немного громоздко, поскольку вам придется поддерживать его в актуальном состоянии.

3) попросите вашего общего менеджера обновить предпочтения, возможно, с использованием другого метода сериализации.

...