2011-10-26 66 views
9

我想設置一個CellList,以便單擊一行將切換選擇。這樣可以選擇多行而不需要按住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

良好的捕獲,使用這個選擇模型應該可以選擇多個項目。 private final MultiSelectionModel selectModel = new MultiSelectionModel (); –

3

「無論你添加一個複選框列與否,你必須add a cell preview handler,定義一種是使用DefaultSelectionEventManager最簡單的方法,無論是在組合使用checkbox manager有一個複選框列或creating a custom one(你倒是地圖點擊事件爲toggle action

你可以看到它使用複選框變種,在GWT Showcase;它使用setSelectionModel超載有兩個參數,同時添加CellPreviewEvent.Handler「。

(感謝this answer

+1

謝謝你的職位。它如何適用於CellList?使用CellTable實現點擊式按鈕行爲非常簡單,但我無法使用CellList進行操作。 –