gpt4 book ai didi

gwt - 使用 SelectionModel 或 ListDataProvider 在 CellList 中选择元素

转载 作者:行者123 更新时间:2023-12-01 11:55:59 26 4
gpt4 key购买 nike

我使用 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);

最佳答案

您必须实现一个 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);
}

关于gwt - 使用 SelectionModel 或 ListDataProvider 在 CellList 中选择元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7219572/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com