Ich möchte eine andere Aktivität auf Android starten, erhalte jedoch folgende Fehlermeldung:
Bitte geben Sie den Konstruktoraufruf an. Der Klassifikator 'Seite2' hat kein Begleitobjekt
nach dem Instanziieren der Intent
Klasse. Was soll ich tun, um den Fehler zu beheben? Mein Code:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
fun buTestUpdateText2 (view: View) {
val changePage = Intent(this, Page2)
// Error: "Please specify constructor invocation;
// classifier 'Page2' does not have a companion object"
startActivity(changePage)
}
}
android
kotlin
android-intent
android-activity
J Adonai Dagdag
quelle
quelle
Antworten:
Um ein
Activity
in Java zu starten, das wir geschrieben habenIntent(this, Page2.class)
, müssen Sie grundsätzlichContext
im ersten Parameter und die Zielklasse im zweiten Parameter definieren. NachIntent
Methode im Quellcode -Wie Sie sehen, müssen wir den
Class<?>
zweiten Parameter eingeben.Durch das Schreiben geben
Intent(this, Page2)
wir niemals an, dass wir die Klasse bestehen werden. Wir versuchen, einenclass
Typ zu übergeben, der nicht akzeptabel ist.Verwenden Sie
::class.java
die Alternative zu.class
Kotlin. Verwenden Sie den folgenden Code, um Ihre zu startenActivity
Beispiel -
quelle
::class.java
anstatt.class
? Der Kotlin-Ansatz ist im Vergleich zu Java ungewöhnlich kompliziert.class
gibt einen Kotlin zurückKClass
, aber Android erwartet ein JavaClass<...>
, daher die.java
Eigenschaft.Mit dieser einfachen Methode können Sie einfach ein
Activity
In starten.KOTLIN
quelle
putExtra
Methode zu verwenden . Ich habe es gerade hinzugefügt, um Werte zu übergeben, wenn ich neuActivity
Um eine neue Aktivität zu starten,
Ändern Sie also Ihren Code in:
quelle
Sie können die Angabe des Parameters im Allgemeinen vereinfachen,
BlahActivity::class.java
indem Sie eine generische Inline-Funktion definieren.Weil du das kannst
Oder noch einfacher
So ist es jetzt
quelle
inline fun <reified T: Activity> Context.createIntent(vararg extras: Pair<String, Any?>) = Intent(this, T::class.java).apply { putExtras(bundleOf(*extras)) }
anstelle von dem, was ich gesagt habe, einrichten und es wird funktionieren (vorausgesetzt, Sie habenbundleOf
von Android-Ktx oder Anko)Sie müssen das zweite Argument des Klassentyps angeben. Sie können es auch ein bisschen aufgeräumter haben, wie unten.
quelle
Versuche dies
quelle
Dies ist meine Hauptaktivität, bei der ich den Benutzernamen und das Passwort von der Textbearbeitung und der Einstellung zur Absicht nehme
Dies ist meine zweite Aktivität, bei der ich Werte von der Hauptaktivität erhalten muss
quelle
Dies liegt daran, dass Ihre
Page2
Klasse kein Begleitobjekt hat, dasstatic
Java ähnelt , um Ihre Klasse zu verwenden. Um Ihre Klasse als Argument zu übergebenIntent
, müssen Sie so etwas tunquelle
Von Aktivität zu Aktivität
Vom Fragment zur Aktivität
quelle
Nun, ich fand diese beiden Möglichkeiten die einfachsten aller Ergebnisse:
Weg Nr. 1:
Weg Nr. 2: (Allgemein)
quelle
quelle
Ich hatte ein ähnliches Problem. Ich begann meine Bewerbung in Kotlin zu schreiben. Nachdem ich eine meiner Aktivitäten umgeschrieben hatte, wollte ich sehen, ob es irgendwelche Probleme gibt. Das Problem war, dass ich nicht sicher war, wie ich eine Absicht von einer Java-Datei an Kotlin senden sollte Datei.
In diesem Fall habe ich eine statische Funktion in Kotlin (Begleitobjekt) erstellt. Diese Funktion ruft einen Kontext (aus der aktuellen Aktivität) ab und gibt die neue Absicht zurück, während der aktuelle Kontext ("Java" -Kontext) verwendet wird, während die Kotlin-Klasse (") verwendet wird. :: class.java ").
Hier ist mein Code:
quelle
@JvmStatic
IhrernewIntent
Methode hinzufügen , können Sie sie ohne dasCompanion
Teil aus Java aufrufen .Einzelheiten
Schritt 1. Anwendung ()
Schritt 2. Router-Objekt hinzufügen
Verwendung
quelle
Denken Sie daran, die Aktivität, die Sie präsentieren möchten, auch zu Ihrer hinzuzufügen
AndroidManifest.xml
:-) Das war das Problem für mich.quelle
Wie wäre es damit, die Kapselung in Betracht zu ziehen?
Beispielsweise:
quelle
Sie können sowohl Kotlin- als auch Java-Dateien in Ihrer Anwendung verwenden.
Um zwischen den beiden Dateien zu wechseln, stellen Sie sicher, dass Sie ihnen in AndroidManifest.xml eine eindeutige <action android: name = "" geben, wie folgt:
Gehen Sie dann in Ihrer MainActivity.kt (Kotlin-Datei) folgendermaßen vor, um eine in Java geschriebene Aktivität zu starten:
Gehen Sie in Ihrer MainActivityJava.java (Java-Datei) folgendermaßen vor, um eine in Kotlin geschriebene Aktivität zu starten:
quelle
Eine andere einfache Möglichkeit, zu einer anderen Aktivität zu navigieren, ist
quelle