Warum kann ich keine Parameter an den Android Activity Constructor übergeben?

8

Ich weiß, dass ich keine Parameter an den Activity-Konstruktor in Android weitergeben kann, aber ich würde gerne verstehen warum.

Was ich versucht habe ist:

%Vor%

Ich habe die Klasse wie folgt definiert:

%Vor%

Und es funktioniert perfekt, wenn ich die Parameter aus dem Konstruktor entferne. Ich habe es schließlich mit intent.putExtra gemacht, aber bin sehr neugierig zu wissen, warum das nicht möglich ist, indem ich Parameter an den Konstruktor übergebe?

LogCat :

%Vor%     
Manar Bushnaq 04.02.2012, 02:36
quelle

3 Antworten

17

Siehe Ihren Code:

%Vor%

Auch wenn Sie ein Objekt Ihrer Aktivität erstellen, ist das, was Sie im Intent-Objekt "weitergeben", nicht die activity object , sondern nur die class of your activity . In startActivity() versucht das Android Framework ein Objekt Ihrer Aktivität zu instanziieren. Und es ruft den Standardkonstruktor (ohne Parameter) auf, wenn es das tut. Es schlägt fehl, wenn Ihre Klasse keinen Konstruktor ohne Parameter hat.

Natürlich haben Sie die richtige Lösung gefunden, übergeben Sie die Parameter als Teil des Intent-Objekts.

    
Sameer 04.02.2012, 05:13
quelle
0

Welchen Fehler bekommen Sie, wenn Sie versuchen, den Konstruktor aufzurufen? Sie können Werte an neue Instanzen Ihrer Aktivität übergeben, indem Sie ihre Konstruktion aufrufen. Es kann Ihr Problem lösen oder nicht, aber was passiert, wenn Sie Ihren Konstruktor mit @override annotieren?

Das heißt, Sie sollten Bundles oder die intent.put-Methode verwenden, um Daten für sie verfügbar zu machen, da diese Werte vom System wiederhergestellt werden können, wenn Ihre Aktivität pausiert ist, um Speicher freizugeben.

    
David C. Sainte-Claire 04.02.2012 03:02
quelle
0

Wenn Sie wirklich ein Activity erstellen müssen, das einen Konstruktor hat (weil Sie beispielsweise ein Activity erstellen, das von einer anderen App gestartet wird, z. B. die Bearbeitungsaktivität eines Tasker Plugin), können Sie dies tun, indem Sie eine abgeleitete Klasse verwenden, wie folgt:

%Vor%

Wenn Sie den Parameter generieren müssen, ersetzen Sie "parameter" durch einen Funktionsaufruf, der den entsprechenden Wert zurückgibt.

    
Trebor Rude 27.08.2014 02:23
quelle