Восстанавливает один вид RCP при восстановлении другого

#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. ах, хорошо. Я добавлю к своему ответу