「次の要素」と「前の要素」の 2 つのボタンと、CellList を含むカスタム ウィジェットがあります。ボタンのクリック時に、SelectionModel を呼び出して CellList の選択を変更するウィジェットのメソッドを呼び出します。
selectionModel.setSelected(value, true);
CellList のコンテンツを更新すると、ボタンは正常に機能しますが、リスト内の要素をクリックして選択すると、この動作が発生します。たとえば、要素 {0, 1, 2, 3, 4, ..} がリスト。要素 1 をクリックし、[次の要素] ボタンを 2 回押します。これらの SelectionChangeEvent が発生します。
- 選択を 1 -> 2 に変更 (最初のボタン押下時)
- 2 -> 3 (2 回目のプレス)
- 3 -> 1
しかし、ステップ2の後、「前へ」を押すと、要素1に正しく戻ります。したがって、マウスでクリックした要素では、選択が1ステップ以上移動しません。
3番目のイベントがどこから来るのかわかりません。私の唯一の推測では、手動選択イベントは発砲後も保留中のままですが、それを確認する方法がわかりません。誰でもこの問題の理由を知っていますか?
アップ:
クリックイベントによる選択がEventBusのどこかにぶら下がっていることを確認しました:検索フィルターを変更すると、ボタンクリックと同じ方法でSelectionModelにアクセスし、選択を最初の要素に設定します。しかし、同じことが起こる前にユーザーが CellList をクリックした場合: 最初に、選択が 0 に変更され、2 番目に、データの新しい選択にその要素が含まれている場合、以前に選択された状態に戻ります。
upd (Ümit の質問):
nextButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
/* Omitting checks that there are elements on the list,
some element is selected and isn't last */
T value = dataProvider.getList().get(currentIndex() + 1);
singleSelectionModel.setSelected(value, true);
singleSelectionModel.isSelected(value);
Element rowElement = cellList.getRowElement(index);
rowElement.scrollIntoView();
}
}
upd:この問題の原因が見つかりました: http://code.google.com/p/google-web-toolkit/issues/detail?id=6310