2011-08-01 9 views
8

Ho un CellTree che utilizza un MultiSelectionModel con CheckboxCells come parte di una cella composita. Sembra che tutto funzioni.Selezione cella GWT

Quello che sto effettivamente cercando di fare è generare schede nella mia interfaccia per ogni elemento che può essere selezionato nell'albero. Sembra banale, ma sono perplesso su come ottenere il MyData su un selectionChange. Gli articoli devono rimanere selezionati in modo che se I deseleziona in seguito, le schede vengano quindi rimosse.

Ho bisogno di prendere il MyData per l'elemento appena selezionato per sapere quale dovrebbe essere il contenuto della scheda.

 final MultiSelectionModel<TableLight> selectionModel = new MultiSelectionModel<TableLight>(); 
    selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { 

     public void onSelectionChange(SelectionChangeEvent event) { 

     } 
    }); 

Mi sento come se mi mancasse del tutto l'ovvio. Tutto quello che posso fare nell'evento selectionChange è di interrogare il mio gestore di selezione per vedere quale è il set selezionato. Esiste un modo per collegare un listener a una selezione di struttura specifica anziché a un globale, "qualcosa è cambiato" listener.

Qualsiasi suggerimento sarebbe molto apprezzato.

risposta

2

si deve accedere getSelectedSet() sul SelectionModel per ottenere gli elementi selezionati nel vostro CellTree. Sfortunatamente sembra esserci ora come ottenere l'ultimo elemento selezionato (come nel modello SingleSelection).

final MultiSelectionModel<TableLight> selectionModel = new MultiSelectionModel<TableLight>(); 
    selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { 

     public void onSelectionChange(SelectionChangeEvent event) { 
       Set<TableLight> selectedItems = selectionModel.getSelectedSet(); 
     } 
    }); 
+1

Sì, quello fa davvero schifo come chiaramente l'informazione è nota internamente. Pensavo che forse ci sarebbe stato un altro modo. Quello che ho già dovuto fare è ottenere il set selezionato, quindi trovare la differenza di set per aggiungere/rimuovere le schede. – dpwr

4

Ok, per chi lo trova dopo, c'è un modo!

Quando si aggiunge CheckboxCell a CompositeCell è possibile specificare un FieldUpdater da restituire che viene chiamato quando il campo viene modificato.

  hasCells.add(new HasCell<TableLight, Boolean>() { 

      // Cell containing checkbox 
      private Cell cell = new CheckboxCell(true, false); 

      public Cell<Boolean> getCell() { 
       return cell; 
      } 

      public FieldUpdater<TableLight, Boolean> getFieldUpdater() { 
       return new FieldUpdater<TableLight, Boolean>() { 

        public void update(int index, TableLight object, Boolean value) { 
         if (value) { 
          tablesTabPanel.addTable(object); 
         } else { 
          tablesTabPanel.removeTable(object); 
         } 
        } 
       }; 
      } 

      public Boolean getValue(TableLight object) { 
       return selectionModel.isSelected(object); 
      } 
     }); 

Inoltre, solo per evitare confusione. Quando stavo parlando di MyData sopra, questo è TableLight nell'esempio.

7

Aggiunta di un modello di selezione estesa si arriva l'ultimo elemento selezionato:

gridSelectionModel = new MultiSelectionModel<MyData>(KEY_PROVIDER){ 

     public void setSelected(MyData myData, boolean selected) { 
      super.setSelected(myData, selected); 
      if (selected){ 
       System.out.println("setSelected selected " + myData); 
       // call now some ui handler to use the last selected myData element 
      } 
     } 
    }; 

Spero che questo aiuta.

Problemi correlati