我使用CellList列出我的数据,使用ListDataProvider管理数据,使用SelectionModel从CellList中选择元素并相应地生成事件。
现在,当我使用cellList.getList()。set(index,bean)或cellList.getList()。remove()更新或删除元素时,它成功完成了操作。但之后它会自动选择我不想要的CellList中的第一条记录。
有人可以建议我如何在CellList中取消选择所选记录?
下面是我如何初始化selectionmodel和listprovider的代码:
ListDataProvider<AppsBean> dataProvider = new ListDataProvider<AppsBean>();
CellList<AppsBean> appsCellList;
SingleSelectionModel<AppsBean> singleSelectionModel;
ProvidesKey<AppsBean> keyProvider = new ProvidesKey<AppsBean>() {
public Object getKey(AppsBean item) {
// Always do a null check.
return (item == null) ? null : item.getId();
}
};
//here cell is the AbstractCell<AppsBean>
appsCellList = new CellList<AppsBean> (cell, keyProvider);
dataProvider.addDataDisplay(appsCellList);
appsCellList.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.BOUND_TO_SELECTION);
singleSelectionModel = new SingleSelectionModel<AppsBean>(keyProvider);
appsCellList.setSelectionModel(singleSelectionModel);
singleSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
@Override
public void onSelectionChange(SelectionChangeEvent event) {
AppsBean selectedApp = singleSelectionModel.getSelectedObject();
if (selectedApp != null)
appsForm.fillApps(selectedApp);
}
});
当我添加新记录时:
dataProvider.getList().add(0, appsBean);
更新记录:
AppsBean bean = singleSelectionModel.getSelectedObject();
dataProvider.getList().set(dataProvider.getList().indexOf(bean), appsBean);
对于删除:
int selectedIndex = dataProvider.getList().indexOf(singleSelectionModel.getSelectedObject());
dataProvider.getList().remove(selectedIndex);
答案 0 :(得分:3)
您必须实施KeyProvider,以确保即使对象本身发生变化,您选择的DTO也保持不变。
如果您不提供KeyProvider,它可能会使用equals来比较对象,如果它们发生了变化,那么您可能会遇到问题。
ProvidesKey keyProvider = new ProvidesKey() {
public Object getKey(Contact item) {
//return the unique identifier for your DTO
return (item == null) ? null : item.id;
}
};
然后你必须使用这个keyProvider
初始化CellTable和selectionModel CellList cellList = new CellList(new ContactCell(),keyProvider);
SelectionModel selectionModel = new SingleSelectionModel(keyProvider);
cellList.setSelectionModel(selectionModel);
<强>更新强> 取消选择所选对象的工作方式如下:
Object obj = selectionModel.getSelectedObject();
if (obj != null) {
selectionModel.setSelected(obj,false);
}
答案 1 :(得分:1)
我遇到了与GWT 2.5.1相同的问题。 以编程方式取消选择对象不起作用:当我从数据提供程序列表中删除对象时,选择了下一行(并且取消选择引发了另一个不需要的事件)。 解决方案是:
selectionModel.getSelectedSet().clear();
答案 2 :(得分:0)
我有同样的问题:@vbjain写道:现在,当我使用cellList.getList().set(index, bean)
或cellList.getList().remove()
更新或删除元素时,它已成功完成操作。但之后它会自动选择CellList
中我不想要的第一条记录。
经过几个小时的谷歌搜索后,我发现当键盘策略为:
时会发生这种情况KeyboardSelectionPolicy.BOUND_TO_SELECTION
如果选择KeyboardSelectionPolicy.DISABLED
,则无法通过键盘向上/向下列出,但解决了选择第一行的问题。