视图开发-UI状态存储

eclipse使用工作台提供的Memento来支持UI状态保存
1 排序保存
在AddressViewerSorter添加以下代码

public class AddressViewerSorter extends ViewerSorter {
//xml元素名
private static final String TAG_DESENDING = "descending";
private static final String TAG_INDEX = "columnIndex";
private static final String TAG_CATEGORY = "category";
private static final String TAG_TRUE = "true";
public void saveState(IMemento memento) {
for (int i = 0; i < infos.length; i++) {
SortInfo info = infos[i];
IMemento mem = memento.createChild(TAG_CATEGORY);
mem.putInteger(TAG_INDEX, info.columnIndex);
if (info.descending)
mem.putString(TAG_DESENDING, TAG_TRUE);
}
}

//...
public void init(IMemento memento) {
List newInfos = new ArrayList(infos.length);
IMemento[] mems = memento.getChildren(TAG_CATEGORY);
for (int i = 0; i < mems.length; i++) {
IMemento mem = mems[i];
Integer value = mem.getInteger(TAG_INDEX);
if (value == null)
continue;
int index = value.intValue();
if (index < 0 || index >= infos.length)
continue;
SortInfo info = infos[index];
if (newInfos.contains(info))
continue;
info.descending = TAG_TRUE.equals(mem.getString(TAG_DESENDING));
newInfos.add(info);
}
for (int i = 0; i < infos.length; i++)
if (!newInfos.contains(infos[i]))
newInfos.add(infos[i]);
infos = (SortInfo[]) newInfos.toArray(new SortInfo[newInfos.size()]);
}
}


调用初始化和保存方法

在view的init方法中获取workbench传递的Imemo对象
public void init(IViewSite site, IMemento memento)throws PartInitException
{
super.init(site, memento);
this.memento = memento;
}
//在创建排序器时,初始化状态
private void createTableSorter() {
//...
if(memento != null)
sorter.init(memento);
}

//保存状态
public void saveState(IMemento memento){
super.saveState(memento);
sorter.saveState(memento);
filterAction.saveState(memento);
}



2 过滤信息存储方法类似
在AressFilter中添加

public class AddressFilter extends Action {
//保存过滤状态
public void saveState(IMemento memento){
categoryFilter.saveState(memento);//具体保存方法
}
//获得保存的过滤状态
public void init(IMemento memento){
categoryFilter.init(memento);//具体初始化方法
}
}

public class AddressViewerCategoryFilter extends ViewerFilter {
//保存在IMemento中的标记名称
private static final String TAG_PATTERN = "pattern";
private static final String TAG_TYPE = "CategoryFilterInfo";
//保存过滤状态
public void saveState(IMemento memento) {
if (pattern.length() == 0)
return;
IMemento mem = memento.createChild(TAG_TYPE);
mem.putString(TAG_PATTERN, pattern);
}
//获得保存的过滤状态
public void init(IMemento memento) {
IMemento mem = memento.getChild(TAG_TYPE);
if (mem == null)
return;
setPattern(mem.getString(TAG_PATTERN));
}
}


view中调用:


// 加到菜单栏
bars.getMenuManager().add(filterAction);
//为持久化UI状态提供支持
if(memento != null)
filterAction.init(memento);


public void saveState(IMemento memento){
super.saveState(memento);
filterAction.saveState(memento);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值