2

我在 GWT 中使用 CellTable 并尝试在发生某些事件时向一行添加样式。添加样式的代码如下:

Range range = playlistTable.getVisibleRange();
int start = range.getStart();

for (int i = start; i < start + playlistTable.getPageSize(); i++) {

     if (playlistData.get(i) == currentSong) {
            playlistTable.getRowElement(i).addClassName("highlightRow");

     } else {
            playlistTable.getRowElement(i).removeClassName("highlightRow");
     }
 }

当应用程序加载并显示单元格表的第一页时,一切正常。但是,当我滚动到下一页并调用上述代码时,GWT 会引发 IndexOutOfBoundsException。当我调用 getRowElement 时,它不喜欢我的索引,只有当索引“不在当前页面上”时才会发生这种情况。就好像 getRowElement 总是认为当前页面是第一页。如果我滚动回第一页,一切正常。有没有人遇到过这个?我错过了什么还是这是 GWT 中的错误?

4

2 回答 2

1

我怀疑问题出start0有效的页面上。如果你这样做会发生什么playlistTable.getRowElement(i - start)?你可能不得不在某个地方扔一个+ 1或一个- 1

于 2012-11-03T03:19:58.187 回答
1

不是您问题的直接答案,但是您的代码会简单得多RowStyles

// do it only once!
playlistTable.setRowStyles(new RowStyles<Song>() {
  @Override
  public String getStyleNames(Song row, int rowIndex) {
    return (row == currentSong) ? "highlightRow": "";
  }
});

您可能还想使用equals()和/或某些ProvidesKey对象将row与进行比较currentSong

于 2012-11-03T10:39:52.063 回答