[eclipse] Eigenes Event feuern?

Vatar

Erfahrenes Mitglied
Hallo.

Ich habe wieder mal ein Problem :-)
Ich habe eine View mit ein paar Fahrzeugen, welche ich natürlich auch löschen kann. Meine Aktion-Klasse holt sich die selektierten Fahrzeuge über den ISelectionService (vorher der Viewer registriert) und löscht diese. Jetzt muss ich aber noch mein Model und den Viewer aktualisieren. Ich dachte jetzt daran ein eigenes Event zu basteln und die View bei diesem zu registrieren. Die Aktion-Klasse soll dann dieses Event feuern und dadurch soll ich der View-Klasse der ListViewer aktualisiert werden.

Geht so was? Und falls ja, wie mache ich das am elegantesten?
Danke
-- Marc
 
Hallo,

natürlich geht so was. Schau dir mal den "Observer Muster" mal an. Es ist richtige Lösung fürs dein Problem.

Gruß
erkan
 
Ich hätte da noch eine Frage. Ist es sinnvoll diesen Pattern direkt im Model einzubauen oder nur zwischen GUI und Action?

Falls mir jemand erklären kann was es mit der inputChanged-Methode eines ContentProviders auf sich hat wäre ich auch sehr dankbar, denn diese entzieht sich auch noch ein wenig meiner Kenntniss.

Danke
 
ich weis nicht wie weit du jetzt bist, aber ich umschreibe wie in etwas das ganze projekt aus sehen soll, da ist dann auch das inputChanged() dabei

du löscht ein fahrzeug

dein Model hat hoffentlich nach dem typischen Patterns ein ArrayList (oder Vector) der listeners
dann gibt es natürlich add/remove listeners, und ein methode fireMobileDeleted
dazu brauchst du ein Interface IModelChanged mit der methode mobileDeleted

wenn dein model verändert wird, also z.bsp dein fahrzeug gelöscht wird, musst du etwas in der richtung wie Model.getInstance().removeMobile(string mobile); aufrufen

in dieser remove methode rufst du dann nach dem löschen zusätzlich noch Model.getInstance().fireMobileDeleted() auf, wo dann über alle listeners iteriert wird und l.mobileDelted() aufgerufen wird.

dadurch werden alle listener verständigt das das model verändert wurde

deine ContentProvider für die view implementiert IModelChanged und in der Funktion mobileDeleted() rufst du viewer.refresh() auf.

und hier kommt inputChanged() ins spiel, diese methode wird einmal beim starten aufgerufen und du bekommst eine View v mit.

diese view musst du im contentprovider lokal abspeichern also so in der art this.viewer = v;
zusätzlich meldest du dich in dieser methode noch als listener beim model an, Model.getInstance().addMobileDeletedListener(this);

in der mobileDeleted() rufst du dann einfach nur mehr viewer.refresh() auf

nachdem ich nicht genau weis, wie weit du schon bist / warst, hab ich mal eine ziemlich ausführliche beschreibung wie man das gut löst geschrieben

falls du beispiel code auch noch brauchen solltest, melde dich einfach noch mal

mfg
 
Ähm sorry, aber ich müsste doch auf dein Angebot zwecks Code zurückkommen.

Ich bin mir einfach nicht ganz sicher wo im Model die Listener hingehören (zu jeden Objekt, oder zu einer Liste welche die Objekte beinhaltet)? Auch habe ich etwas von einer Fassade gelesen (im Bezug auf Observer) aber es wurden keine Details genannt.

-- Marc
 
Zurück