2011-10-26 20 views
9

セルを設定して、行をクリックすると選択範囲が切り替わるようにしたいと考えています。このように、Ctrlキーを押したままで複数の行を選択することができます。GWT CellListクリックして選択を切り替える(複数選択)

有効にするには何を変更する必要がありますか?

class ToggleEventTranslator<T> implements DefaultSelectionEventManager.EventTranslator<T> { 
    @Override 
    public boolean clearCurrentSelection(final CellPreviewEvent<T> event) { 
     return false; 
    } 

    @Override 
    public SelectAction translateSelectionEvent(final CellPreviewEvent<T> event) { 
     return SelectAction.TOGGLE; 
    } 

} 


MultiSelectionModel<ObjProxy> multiSelectionModel = new MultiSelectionModel<ObjProxy>(); 

    ocjCellList.setSelectionModel(multiSelectionModel, DefaultSelectionEventManager 
      .<ObjProxy> createCustomManager(new ToggleEventTranslator<ObjProxy>())); 

答えて

8
list.addCellPreviewHandler(new Handler<T>() { 

     @Override 
     public void onCellPreview(final CellPreviewEvent<T> event) { 

      if (BrowserEvents.CLICK.equals(event.getNativeEvent().getType())) { 

       final T value = event.getValue(); 
       final Boolean state = !event.getDisplay().getSelectionModel().isSelected(value); 
       event.getDisplay().getSelectionModel().setSelected(value, state); 
       event.setCanceled(true); 
      } 
     } 
}); 


private final MultiSelectionModel<T> selectModel = new MultiSelectionModel<T>(); 

final Handler<T> selectionEventManager = DefaultSelectionEventManager.createCheckboxManager(); 
list.setSelectionModel(selectModel, selectionEventManager); 
+0

'selectModel'定義はどのように見えますか? – Carl

+0

私はこのコードをCellListで試しましたが、複数の項目を選択することはできません。実装にはさらに何かありますか? – Carl

+0

この選択モデルを使用すると、複数の項目を選択できるようにする必要があります。プライベートfinal MultiSelectionModel selectModel = new MultiSelectionModel (); –

3

「チェックボックス列かどうかを追加するかどうか、あなたはadd a cell preview handlerする必要があります。1を定義する最も簡単な方法は、DefaultSelectionEventManagerを使用することですが、どちらかのチェックボックス列との組み合わせでcheckbox manager、またはcreating a custom oneを使用して(あなたは、 「)toggle actionにクリックイベントをマップdは

あなたはそれがGWT Showcaseで、チェックボックスのバリアントを使用見ることができます;。。それは同時にCellPreviewEvent.Handlerを追加するために、2つの引数を持つsetSelectionModelオーバーロードを使用しています」

this answerにクレジット)ポスト用

+1

感謝。 CellListにどのように適用されますか? CellTableでToggle-on-clickの動作を達成するのは簡単ですが、CellListで動作させることができませんでした。 –

関連する問題