Ich schreibe ein benutzerdefiniertes Dialogfeld und versuche, einige Daten von seiner übergeordneten Aktivität abzurufen, bekomme aber immer null , wenn ich getOwnerActivity anrufe, könnte mir jemand sagen, warum das passiert ? Warum kann ich die Daten im DemoDialog anzeigen, während Daten von TestDialogActivity nicht angezeigt werden?
Vielen Dank im Voraus.
DialogTestActivity
%Vor%DemoDialog
%Vor% Wenn Sie über die Situation nachdenken, werden Sie verstehen warum. Wenn Sie new DemoDialog(this)
aufrufen, führen Sie den gesamten Code im Konstruktor aus. Danach gibst du es von onCreateDialog
zurück und Android macht seine Magie. Wenn Sie versuchen, den Besitzer vom Konstruktor zu bekommen, hat Android noch nicht gehakt, so dass Sie noch keinen Besitzer haben.
Sie können also beides tun:
%Vor%Beachten Sie, dass die zweite Methode bevorzugt wird, weil
Ich habe versucht, getOwnerActivity()
method in allen möglichen Methoden von custom Dialog
zu verwenden. Es gibt immer null zurück (Android 2.3). Dann habe ich den Quellcode überprüft und die Aktivität, die zurückgegeben wird, wird nur in setOwnerActivity(Activity activity)
gesetzt, die nirgendwo aufgerufen wird. Wenn Sie möchten, dass getOwnerActivity()
einen anderen Wert als null zurückgibt, müssen Sie Folgendes tun:
Sie können Ihren benutzerdefinierten Dialog von AppCompatDialog
erweitern und mit diesem Code auf Aktivitäten zugreifen:
Dies, unten, funktionierte für mich.
%Vor%Dann verwende ich Aktivität anstelle von getOwnerActivity ().