0

「次の要素」と「前の要素」の 2 つのボタンと、CellList を含むカスタム ウィジェットがあります。ボタンのクリック時に、SelectionModel を呼び出して CellList の選択を変更するウィジェットのメソッドを呼び出します。

selectionModel.setSelected(value, true);

CellList のコンテンツを更新すると、ボタンは正常に機能しますが、リスト内の要素をクリックして選択すると、この動作が発生します。たとえば、要素 {0, 1, 2, 3, 4, ..} がリスト。要素 1 をクリックし、[次の要素] ボタンを 2 回押します。これらの SelectionChangeEvent が発生します。

  1. 選択を 1 -> 2 に変更 (最初のボタン押下時)
  2. 2 -> 3 (2 回目のプレス)
  3. 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

4

1 に答える 1

0

HandlerRegistration を使用する必要があるようです。したがって、複数のクリック イベントは呼び出されません。

参照する:

GWT ハンドラー登録

関連リンク

于 2013-12-23T12:14:24.980 に答える