2011-10-26 16 views
9

Me gustaría configurar una CellList para que al hacer clic en una fila se alternar la selección. De modo que se pueden seleccionar múltiples filas sin necesidad de mantener presionada la tecla ctrl.GWT CellList Haga clic para alternar la selección (Selección múltiple)

¿Qué necesito cambiar para que funcione?

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

Respuesta

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

¿cómo se ve la definición de 'seleccionarModelo'? – Carl

+0

He intentado este código con una CellList y no permite que se seleccionen varios elementos. ¿Hay más en la implementación? – Carl

+0

Buena captura, usando este modelo de selección debería permitir seleccionar múltiples elementos. private final MultiSelectionModel selectModel = new MultiSelectionModel (); –

3

"Si se agrega una columna de casilla o no, tendrá que add a cell preview handler. La forma más sencilla de definir una es utilizar DefaultSelectionEventManager, ya sea utilizando un checkbox manager en combinación con una columna de casillas de verificación u creating a custom one (se 'd asignar un evento click en un toggle action)

se puede ver que utiliza, la variante casilla de verificación, en el GWT Showcase;. utiliza la sobrecarga setSelectionModel con dos argumentos para añadir el CellPreviewEvent.Handler al mismo tiempo ".

(Crédito a this answer)

+1

Gracias por el puesto. ¿Cómo se aplica a una CellList? Lograr el comportamiento de alternar con clic con una CellTable es sencillo, pero no he podido hacer que funcione con una CellList. –

Cuestiones relacionadas