#eclipse-plugin #eclipse-rcp
#eclipse-плагин #eclipse-rcp
Вопрос:
Два представления в моем приложении должны загружать одну и ту же информацию при восстановлении состояния. Моя идея заключалась в том, чтобы избежать сохранения его дважды, чтобы одно представление создавало другое в init
or createPartControl
, если оно еще не было создано. Однако,
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(...)
там не работает, так как getActivePage()
возвращает null
. Возможно ли обойти это?
Ответ №1:
Делегируйте менеджеру или службе загрузку / поддержание / сохранение общего состояния. Это гарантирует, что первый доступ инициализирует вашу информацию. Когда представление будет создано, просто перейдите к менеджеру и извлеките информацию. Если пользователь никогда не создает экземпляр вашего представления, то вам никогда не приходилось выполнять дополнительную работу.
В общем случае вы не можете создать / создать экземпляр одного представления при создании / активации другого представления. Eclipse этого не допустит и будет генерировать ошибки в журнале ошибок.
Редактировать:
3 стандартных шаблона сохранения, которые я видел используемыми (и / или неправильно использованными :-), являются:
1) Пусть ваш плагин получит местоположение своего состояния и просто сериализует ваше состояние там. (расположение предоставляется бесплатно, если вы принадлежите к подклассу org.eclipse.core.runtime.Plugin
) Вы можете сделать это в своем методе activator stop(BundleContext)
. Вы можете использовать такие классы, как org.eclipse.ui.XMLMemento
для сериализации в / из XML, если у вас еще нет решения.
2) если у вас есть подкласс, org.eclipse.ui.plugin.AbstractUIPlugin
который вы можете использовать org.eclipse.ui.plugin.AbstractUIPlugin.getDialogSettings()
для сохранения своего состояния. Потенциально немного громоздкий, поскольку вам пришлось бы поддерживать его в актуальном состоянии.
3) попросите вашего общего менеджера обновить настройки, возможно, используя другой метод сериализации.
Комментарии:
1. ОК. Проблема в том, что в представлениях / редакторах уже есть полезная система сохранения состояния, в то время как мне пришлось бы писать новую отдельно, поэтому я пытался избежать этого.
2. ах, хорошо. Я добавлю к своему ответу