2011-10-26 4 views
9

Vorrei impostare una CellList in modo che facendo clic su una riga si alternasse la selezione. Tale che più righe possono essere selezionate senza la necessità di tenere premuto il tasto ctrl.CellList GWT Fare clic per attivare/disattivare la selezione (selezione multipla)

Cosa devo cambiare per farlo funzionare?

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>())); 

risposta

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

come appare la definizione 'selectModel'? – Carl

+0

Ho provato questo codice con una CellList e non consente di selezionare più elementi. C'è dell'altro per l'implementazione? – Carl

+0

Una buona cattura, utilizzando questo modello di selezione dovrebbe consentire la selezione di più oggetti. private final MultiSelectionModel selectModel = new MultiSelectionModel (); –

3

"Se si aggiunge una colonna casella di controllo o no, dovrete add a cell preview handler. Il modo più semplice per definire uno è quello di utilizzare DefaultSelectionEventManager, sia utilizzando un checkbox manager in combinazione con una colonna casella di controllo, o creating a custom one (si 'd mappare un evento click in una toggle action)

si può vedere in passato, la variante casella di controllo, nel GWT Showcase,. utilizza il setSelectionModel di sovraccarico con due argomenti di aggiungere il CellPreviewEvent.Handler allo stesso tempo ".

(Credito a this answer)

+1

Grazie per il post. Come si applica a una CellList? Ottenere un comportamento Toggle-on-click con CellTable è semplice, ma non sono riuscito a farlo funzionare con una CellList. –