1

我有一个要填充的 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 的某些方面。我究竟做错了什么?

4

2 回答 2

2

如果您知道总列表(不仅仅是范围内的列表)为空,那么您可以设置display.setRowCount(0),因此 CellList 将显示“未找到朋友”。

如果您的服务总是返回整个列表,这可以很容易地完成,例如

public void onSuccess(List<PlayerDataEntity> result) {
  display.setRowCount(result.size());
  display.setRowData(0, result);
}
于 2012-05-13T11:18:27.953 回答
0

将以下行添加到方法中:

@Override
public void onSuccess(List<PlayerDataEntity> result) {
   display.setRowData(0, result);
   ((CellList<PlayerDataEntity>) display).redraw();
}
于 2012-05-12T21:23:22.603 回答