Ich habe einen separaten Thread durch Erweitern der AsyncTask
Klasse definiert. Innerhalb dieser Klasse führe ich einige Toasts und Dialoge innerhalb der Methoden onPostExecute
und onCancelled
von AsyncTask durch. Die Toasts bedürfen der Kontext der Anwendung, so dass alles, was ich tun müssen, ist:Was ist der beste Weg, Context innerhalb von AsyncTask zu bekommen?
Toast.makeText(getApplicationContext(),"Some String",1);
Die Dialoge AlertDialog.Builder
erstellt verwenden, die auch einen Kontext in seinem Konstruktor erfordert. Habe ich Recht, dass dieser Kontext der Kontext der Aktivität sein sollte? d.h.
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
wo getActivity
eine benutzerdefinierte Klasse werden könnte, dass die aktuelle Aktivität zurückkehrt. Wenn ja, wie kann man am besten mit dieser Situation umgehen? Eine Klasse wie getActivity
erstellen oder den Kontext der aktuellen Aktivität an den Konstruktor von AsyncTask übergeben?
Ich glaube, ich bin versucht, die Verwendung von Context
zu verstehen - ich habe bemerkt, dass Speicherlecks ein Problem sein können (nicht wirklich die noch verstehen) und wie mit getApplicationContext()
ist der beste Ansatz, soweit möglich.
Danke Phil. Meine AsyncTask ist derzeit eine innere Klasse meiner Aktivität (wie Sie oben zeigen). Während dies für 'Toast.makeText (getApplicationContext(), ...' in 'MyTask's UI-Methoden funktioniert, funktioniert' AlertDialog.Builder (getApplicationContext()) 'nicht. Ich nehme an, dass dies so ist, weil dies nicht der Fall ist den richtigen Kontext zu erhalten? Ist es daher nicht erforderlich, den Kontext der Aktivität an den Konstruktor "MyTask" zu übergeben? Oder fehlt mir etwas? –
Konnten Sie den vollständigen Code des Ortes eingeben, an dem Sie Ihren Dialog erstellt haben? Rufen Sie .show() im Dialog auf. –
Okay, ja! Sowohl "Toast" als auch "AlertDialog" funktionieren, wenn Sie den Kontext an 'MyTask's Konstruktor übergeben, wie oben gezeigt, dh" MyTask "mit' MyTask (this) 'von einem onClick-Ereignis in der Hauptaktivität. Richtig, also muss ich nur klarstellen:' MyTask (this) 'übergibt den Kontext der Aktivität an' MyTask', der sowohl von 'Toast' als auch' AlertDialog' verwendet werden kann , während 'Toast' den Anwendungskontext mit' getApplicationContext() 'verwenden kann, kann' AlertDialog' das nicht, dh er benötigt s der Kontext der Aktivität - denke, dass ich dort falsch lag. –