2015-11-09 4 views
0

У меня есть простое приложение RCP, в котором есть несколько волшебников, из которых у вас есть просмотрщик деревьев. Я хочу сохранить состояние выбранного элемента в средстве просмотра дерева в следующий раз, когда открою этот конкретный вид. На данный момент я реализовал с помощью статических переменных и его работоспособность. Я хочу знать, как это можно сделать лучше?Как сохранить состояние treeviewer в приложении Java RCP?

// Пример кода

private static RepositoryLocationItem lastRepoItemSelected; 

Composite parent=new Composite(SWT.NONE) 
treeViewer = new TreeViewer(parent); 
treeViewer.setContentProvider(new MovingBoxContentProvider()); 
treeViewer.setLabelProvider(new MovingBoxLabelProvider()); 
treeViewer.setInput(getInitalInput()); 

treeViewer.addSelectionChangedListener(new ISelectionChangedListener() { 

/* Setting the value of lastRepoItemSelected */ 
}); 


if(lastRepoItemSelected !=null) 
{ 
treeViewer.setSelection(new StructuredSelection(lastRepoItemSelected),true); 
} 
+0

Является ли это e4 RCP или совместимый с 3.x RCP (расширяет ли ваше представление 'ViewPart')? –

+0

Нет, это не распространяется на ViewPart.It является в основном страницей мастера. –

+0

Тогда это не представление, пожалуйста, используйте правильную терминологию. –

ответ

4

Предполагая, что это является 3.x стиль RCP (ваше мнение распространяется ViewPart), вы можете использовать метод saveState для сохранения состояния просмотра:

@Override 
public void saveState(final IMemento memento) 
{ 
    // TODO set values in the 'memento' 
} 

Затем вы можете использовать метод для восстановления значений из памяти, когда снова отображается представление:

@Override 
public void init(final IViewSite site, final IMemento memento) 
    throws PartInitException 
{ 
    super.init(site, memento); 

    // TODO restore from 'memento' 
} 

Примечание: Mementos сохраняются через перезагрузки RCP, поэтому вам необходимо сохранить в них значения, которые действительны в новом экземпляре RCP.

Также посмотрите на Eclipse wiki entry для получения дополнительной информации.

Для WizardPage вы можете использовать IDialogSettings. Вы должны установить это в вашем Wizard используя что-то вроде:

IDialogSettings pluginSettings = Activator.getDefault().getDialogSettings(); 
IDialogSettings wizardSettings = pluginSettings.getSection("id of your wizard"); 
if (wizardSettings == null) { 
    wizardSettings= new DialogSettings("id of your wizard"); 
    pluginSettings.addSection(wizardSettings); 
} 
setDialogSettings(wizardSettings); 

где Activator является вашим класс плагина активатор и «имя вашего мастера» является идентификатором для мастера (который может быть что угодно, до тех пор, как он уникален в вашем плагине).

В вашей странице мастера вы можете получить настройки с помощью:

IDialogSettings settings = getDialogSettings(); 

IDialogSettings имеет множество методов для сохранения и восстановления различных видов ценностей, таких, как:

settings.put("key", "string value"); 

String value = settings.get("key"); 
+0

, В моих реальных реализациях он простирается от Мастера не из вида. Как его можно достичь? –

+0

В Мастере вы используете 'IDialogSettings' - добавлен ответ –

+0

Спасибо за комментарий. Это было полезно. Я пытался с IDialogSettings работать отлично. Но он сохраняет значения даже после окончания сеанса. Я хочу что-то вроде статического, только сохраняет значение над сеансом и должно очистить значение после окончания сеанса. –