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);