Sto avendo difficoltà a capire l'associazione dati nella mia applicazione Eclipse RCP. Non riesco proprio a capire come dovrebbe funzionare ..Le migliori pratiche per l'associazione dati una lista in Eclipse RCP applicazione
Ecco cosa voglio fare
ho una visione in cui deve essere visualizzato un elenco di testi. I testi vengono "memorizzati" in una semplice List<String>
che è fornito tramite un singoletto (a scopo dimostrativo;)). Quindi chiunque utilizzi lo ListProvider
otterrà l'elenco dei testi. Quando la lista cambia, voglio che la mia vista aggiorni automaticamente i contenuti della tabella.
Ecco quello che ho fatto finora
mio provider dell'elenco è un Observable
che provvederà a darne comunicazione osservatori quando la lista modifiche.
A mio avviso creo un osservatore per guardare il fornitore di lista e quando l'osservatore viene notificato rinfresco mio punto di vista.
Codice in materia di ListProvider
:
public class ListProvider extends Observable {
private Stack<String> hist;
private static ListProvider instance;
// Singleton implementation
public static ListProvidergetInstance() {
if (null == instance) {
instance = new ListProvider
}
return instance;
}
public void add(String text) {
if (this.hist.size() == MAX_SIZE) {
this.hist.remove(MAX_SIZE-1);
}
this.hist.add(0, text);
// notify all observers
this.setChanged();
this.notifyObservers();
}
}
codice per la vista:
public class TestView extends ViewPart {
private TableViewer viewer;
[...]
class ViewContentProvider implements IStructuredContentProvider {
public void inputChanged(Viewer v, Object oldInput, Object newInput) {
}
public void dispose() {
}
public Object[] getElements(Object parent) {
return ClipboardHistory.getInstance().getList().toArray();
}
}
public void createPartControl(Composite parent) {
viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
IContentProvider contentProvider = new ViewContentProvider();
viewer.setContentProvider(contentProvider);
viewer.setLabelProvider(new ViewLabelProvider());
viewer.setInput(getViewSite());
Observer listObserver = new Observer() {
@Override
public void update(Observable o, Object arg) {
// update the table viewer
viewer.refresh();
}
};
ListProvider.getInstance().addObserver(listObserver);
}
}
Domanda
Sta usando Observer
e Observable
il modo "giusto" per andare o sono io manca qualcosa? Non sono sicuro che abbia afferrato il concetto di RCP Databinding ...
io non sono sicuro circa la portata degli elementi nella vostra lista, ma avete considerato l'aggiunta di un semplice elenco SWT (http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.platform .doc.isv% 2Freference% 2Fapi% 2Forg% 2Feclipse% 2Fswt% 2Fwidgets% 2FList.html) oggetto per la tua vista invece di un tableviewer ecc ecc – nbz
Inoltre potrebbe essere meglio usare un ListViewer (http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.platform.doc. isv% 2Freference% 2Fapi% 2Forg% 2Feclipse% 2Fjface% 2Fviewers% 2FListViewer.html) invece di un TableViewer. – nbz
Grazie per l'input. Al momento è solo una lista ma voglio aggiungere più dati ad altre colonne in seguito. Usare un ListViewer cambierebbe il modo in cui osservo l'elenco? – Friederike