Wie kann ein Kontext aus einer Nicht-Aktivitätsklasse abgerufen werden?

8

Ich habe eine Antwort gefunden scheint zu sagen, dass ich eine separate Klasse erstellen und ein statisches MyApplication-Objekt erstellen und eine get-Methode erstellen soll. Dann kann jede Klasse MyApplication.get () aufrufen, um den Kontext abzurufen.

Gibt es einen anderen sauberen Weg? Das ist meine Situation:

Ich habe eine Klasse A und eine Klasse B. Klasse A enthält ein Objekt aus Klasse B (nennen wir das Objekt b). In der Klasse A rufe ich "b.play ()" an. Ich erhalte jedoch eine Nullzeiger-Ausnahme, da Klasse B einen Kontext an die MediaPlayer.create () -Methode übergeben muss.

Bis jetzt habe ich einen Hack zusammengeschmissen und von Klasse A habe ich ... "b.play (this)" angerufen und einfach den Kontext an B übergeben. Das ist aber ziemlich hässlich und sieht aus wie ein schlechter Gebrauch von OOP.

Irgendwelche Gedanken?

    
Community 28.07.2011, 23:41
quelle

4 Antworten

7

Wenn Klasse B erfordert, dass ein Kontext funktioniert, dann sehe ich kein Problem mit der Klasse A, die das liefert (durch einen Parameter in der Wiedergabemethode, einen Parameter in einem Konstruktor usw.).

Ich glaube nicht, dass Sie ein schlechtes OOP machen, indem Sie der Klasse B die Abhängigkeiten liefern, die sie für ihre Arbeit benötigt.

    
Brian Yarger 28.07.2011, 23:52
quelle
10

Dieses Problem scheint in der Android-Entwicklung viel zu entstehen. Eine Lösung, um einen Verweis auf einen bestimmten Kontext zu erhalten, besteht darin, die Anwendung zu unterklassifizieren und einen Verweis auf den Kontext zu erhalten, den Sie möchten.

%Vor%

Diese Lösung erfordert jedoch, dass Sie den Namen Ihrer Unterklasse in Ihrem Manifest angeben.

%Vor%

Sie können dies überall in Ihrer Anwendung so verwenden, wie in Nicht-Aktivitätsklassen.

%Vor%     
Entalpi 16.12.2014 09:47
quelle
1

Die Übergabe von this ist eine praktikable Möglichkeit, Dinge zu tun, besonders wenn this die Aktivität ist, die das Objekt erzeugt, das einen Kontext benötigt. Manchmal lege ich den Kontext in den Konstruktor (wie public MyObject(Context context){this.context = context;} ), so dass Sie ihn nicht jedes Mal senden müssen. Wenn Ihr Objekt jedoch über mehrere Aktivitäten verteilt ist, sollten Sie wahrscheinlich den Kontext aktualisieren, den es mit der neuen Aktivität untersucht, obwohl ich nicht getestet habe, was passiert, wenn Sie die alte Aktivität verwenden.

    
AlbeyAmakiir 28.07.2011 23:52
quelle
1

Ich habe auch hier geantwortet.

Sie können das tun, indem Sie ContextWrapper , verwenden, wie hier beschrieben.

>

Zum Beispiel:

%Vor%     
ET-CS 26.07.2014 21:55
quelle

Tags und Links