[ENTWICKLUNG] CallbackListener in SingleTon

  • Antworten:5
  • Bentwortet
swa00
  • Forum-Beiträge: 3.704

19.06.2017, 16:37:05 via Website

Moin Jungs,

ich wage zu hoffen , ihr hattet mal das Gleiche :-)

Gegeben : SingleTon-Klasse mit CallbackListener, irgendwo mal Initiiert -> funtzt

Jetzt benötige ich die Klasse temporär in einer (SetupActivity)
Also nehme ich mir die Instanz der ursprünglichen Singleton. -> so weit so gut - funtzt auch

Problem :
Ich würde gerne auch den CallbackListener dort verwenden.

Mache ich allerdings einen neuen
ST.setOnStatusListener(new STC.OnStatusListener()) darauf, ändert sich logischerweise
der ursprüngliche Listener, den ich aber nach wie vor behalten möchte.

Ich wollte auch jetzt nicht Broadcasts durch die gegend schicken .

Frage also :

Wie kann ich temporär auf den Listener der ST Klasse zugreifen ?

P.S das ist nicht überlebenswichtig , aber es interessiert mich schon :-)

private static MyClass mInstance =null;
///////////////////////////////////////////////////////////////////////////////
public static MyClass d()
{
if (mInstance == null) mInstance = new MyClass();
return mInstance;
}
////////////////////////////////////////////////////////////////////////////////////////
public interface OnStatusListener
{
public void onStatusChanged(int status);
}
////////////////////////////////////////////////////////////////////////////////////////
public void setOnStatusListener(OnStatusListener listener)
{
onStatusListener = listener;
}

Init

MyClass.d().Initialize(this);

Verwendung

      MC = MyClass.d();
            MC.setOnStatusListener(new MyClass.OnStatusListener()
            {
                @Override
                public void onStatusChanged(int status)
                {
                    onStatusChanged(status);
                }
         }

Und jetzt in der temporären Activity

MyClass MC = MyClass.d();

AN dem Punkt benötige ich nochmal den Zugriff auf den Listener

— geändert am 19.06.2017, 16:51:45

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

19.06.2017, 17:03:22 via Website

Naja selber habe ich das in der Form nicht gemacht, aber da ich auch .NET programmmiere hätte ich eine Lösung ;)

In .NET gibt es zusätzlich zu Callbacks (dort heißt das delegate oder Action, Microsoft hat da viele Wege implementiert...)
aber auch Events, welche von mehreren Listenern "empfangen" werden können.

Auf Java Übertragen ist das nichts anders als eine Liste von deinem Interface:

List<MyInterfaces> callbackInterfaces = new ArrayList<MyInterface>();

//in deiner Methode zum Aufruf des Callbacks
for(MyCallback call : callbackIInterfaces){
//doStuff
}

Zum verwalten der Callbacks dann in deiner Liste mit Add/Remove arbeiten. Ich weiß allerdings nicht was passiert, wenn du das in einer Singleton machst und am Ende existiert der Listener nicht mehr, da du die Activity zu gemacht hast etc. Das kannst du aber mal prüfen und dann entsprechend handeln ;)

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
swa00
  • Forum-Beiträge: 3.704

19.06.2017, 17:07:10 via Website

Ich danke Dir Pascal .

Im Prinzip magst du mir nix anderes sagen , dass ich mir halt mehrere Listener verwalten und in der ST halten soll
und je nach Bedarf diese verwende, allerdings sinnlos an alle gültigen rausfeuere :-)

Und die Alle verwalte ich dann halt in einer Liste

Richtig ? :-)

Ich hatte gehofft , es gäbe was Eleganteres :-)

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

19.06.2017, 17:11:38 via Website

Im Prinzip ja, aber wenn es nur an einer stelle ist könntest du ja auch eine 2. Varialbe für den temporären Listener machen. Ist aber von Handling auch nicht besser...

Und für so eine kleinigkeit einen EventBus nehmen ich weiß nicht...
Ist (zu mindest für micht) viel zu aufwändig mich da reinzudenken und z.B. das hier zu nehmen:
https://github.com/greenrobot/EventBus
oder
https://github.com/square/otto

— geändert am 19.06.2017, 17:12:20

LG Pascal //It's not a bug, it's a feature. :) ;)

swa00

Antworten
swa00
  • Forum-Beiträge: 3.704

19.06.2017, 17:16:34 via Website

Den kannte ich noch gar nicht :-) Danke ..

Aber ist zu viel mit Kanonen auf Spatzen geschossen , hast recht ..

Ok, dann bastel ich mal was zu Fuss :-)

Die Firma Dankt :-)

— geändert am 19.06.2017, 17:17:36

Liebe Grüße - Stefan
[ App - Entwicklung ]

Pascal P.

Antworten
swa00
  • Forum-Beiträge: 3.704

19.06.2017, 20:52:21 via Website

Hallo Pascal,

Rückmeldung : Das Handling mit einer ArrayList klappt wunderbar.

Man muss halt nur aufpassen , dass man ein Remove drauf macht , wenn man den Listener nicht mehr benötigt.

Danke für den Kick

— geändert am 19.06.2017, 20:56:58

Liebe Grüße - Stefan
[ App - Entwicklung ]

Pascal P.

Antworten