我有一个CellList,我填充了AsyncDataProvider
:
@UiField(provided = true)
CellList<PlayerDataEntity> friendCellList;
@Inject
FriendListViewImpl(FriendListController controller) {
friendCellList = new CellList<PlayerDataEntity>(new PlayerCell());
initWidget(uiBinder.createAndBindUi(this));
// if we don't set the row data to empty before trying to get the real data,
// the empty list widget will never appear. But if we do set this,
// then the real data won't show up.
friendCellList.setRowData(Lists.<PlayerDataEntity>newArrayList());
new AsyncDataProvider<PlayerDataEntity>() {
@Override
protected void onRangeChanged(final HasData<PlayerDataEntity> display) {
rpcService.getPlayers(new AsyncCallback<List<PlayerDataEntity>>() {
@Override
public void onSuccess(List<PlayerDataEntity> result) {
display.setRowData(0, result);
}
});
}
}.addDataDisplay(friendCellList);
friendCellList.setEmptyListWidget(new Label("No friends found"));
}
如果我最初没有将行数据设置为空列表,那么如果RPC服务返回空列表,则不会显示空列表小部件。但是,如果我最初将行数据设置为空列表,并且RPC返回非空列表,则该数据将不会显示在窗口小部件中。
我必须误解CellList
API的某些方面。我做错了什么?
答案 0 :(得分:2)
如果您知道,总列表(不仅仅是范围中的列表)为空,那么您可以设置display.setRowCount(0)
,因此CellList将显示“找不到朋友”。
如果您的服务始终返回整个列表,则可以轻松完成此操作,如
public void onSuccess(List<PlayerDataEntity> result) {
display.setRowCount(result.size());
display.setRowData(0, result);
}
答案 1 :(得分:0)
将以下行添加到方法中:
@Override
public void onSuccess(List<PlayerDataEntity> result) {
display.setRowData(0, result);
((CellList<PlayerDataEntity>) display).redraw();
}