I have used CellList for listing my data using ListDataProvider for managing the data and SelectionModel for selecting an element from CellList and generating events accordingly.
Now when i update or delete element using cellList.getList().set(index, bean) or cellList.getList().remove() it sucessfully do the operation. But after that it automatically selects the first record in CellList which i do not want.
Can anyone suggest how can i deselect the selected record in CellList?
Below is the code how i am initializing the selectionmodel and 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);
}
});
When i am adding the new record:
dataProvider.getList().add(0, appsBean);
For updating the record:
AppsBean bean = singleSelectionModel.getSelectedObject();
dataProvider.getList().set(dataProvider.getList().indexOf(bean), appsBean);
And for delete:
int selectedIndex = dataProvider.getList().indexOf(singleSelectionModel.getSelectedObject());
dataProvider.getList().remove(selectedIndex);
You will have to implement a KeyProvider in order to make sure that your selected DTO stays the same even when the object itself changes.
If you don’t provide a KeyProvider it will probably use equals to compare the objects and if they change then you might run into problems.
Then you have to initialize the CellTable and selectionModel with this keyProvider
Update
De-selecting a selected object works like this: