Ich habe ein Fragment, mit dem ein Benutzer eine Nachricht und eine Telefonnummer eingeben kann, an die die Nachricht zugestellt wird. Ich bekomme einen Fehler "kann Methode getApplicationContext () nicht auflösen" Ich habe die Antwort hier die Methode untersucht getApplicationContext () ist nicht definiert , aber es hat mir nicht geholfen, vielleicht implementiere ich es falsch, aber ich bin mir nicht sicher! Dieser Code funktioniert gut als eine Aktivität, aber nicht als ein Fragment.
FragmentTab1-Klasse
%Vor% Die Methode getApplicationContext () existiert nicht in der Klasse Fragment
. Es existiert jedoch in der Klasse Activity
, sodass Sie getActivity().getApplicationContext()
verwenden können, um den Kontext innerhalb eines Fragmentobjekts abzurufen. (Angenommen, das Fragment ist an eine Aktivität angehängt, so dass getActivity()
ein Nicht-Null-Objekt zurückgibt, das normalerweise wahr ist)
Sie sollten den in der Fragmentaktivität verfügbaren Anwendungskontext verwenden
%Vor% Sie sollten den getActivity()
hier nicht als Kontext verwenden, da Toast
länger leben kann als die Aktivität, die ihn zeigte (Home-Schaltfläche wurde gedrückt, eine andere Aktivität wurde gestartet usw.).
Vielleicht ist es genug mit getActivity () als Aktivität erweitert Kontext.
Wie auch immer, denken Sie bitte darüber nach, ob Sie einen Kontext mit dem Lebenszyklus benötigen, der von Ihrem Aktivitätskontext getrennt ist um zu wissen, ob Sie getActivity (), getApplicationContext () oder getActivity () verwenden müssen.
Siehe this thread für weitere Informationen.
Sie müssen in einer Nicht-Aktivitätsklasse einen Konstruktor erstellen, der einen Kontext für ein Argument verwendet, und in Ihrer Aktivitätsklasse müssen Sie den Kontext für die Deklaration eines Objekts übergeben, wie folgt:
%Vor%Siehe die Antwort hier: mit Kontext in Fragment .
Rufen Sie einfach getActivity()
auf, stellen Sie sicher, dass es nicht null ist, und rufen Sie getApplicationContext()
auf.
getApplicationContext()
existierte nicht oder Sie können sagen, dass das nicht in der Fragment-Klasse definiert ist, was bedeutet, dass Sie nicht direkt innerhalb der Fragment-Klasse darauf zugreifen können.
Also ist die Lösung das anstatt so zu machen
%Vor% Sie sollten die getActivity()
Methode wie folgt verwenden
Ich hoffe, es hilft.
Tags und Links android android-fragments