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

問題は、start機能0するページにあると思われます。するとどうなりますか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()することもできます。ProvidesKeyrowcurrentSong

于 2012-11-03T10:39:52.063 に答える