Je souhaite démarrer une autre activité sur Android mais j'obtiens cette erreur:
Veuillez spécifier l'invocation du constructeur; le classificateur 'Page2' n'a pas d'objet compagnon
après avoir instancié la Intent
classe. Que dois-je faire pour corriger l'erreur? Mon 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
la source
la source
Réponses:
Pour démarrer un
Activity
en java que nous avons écritIntent(this, Page2.class)
, vous devez essentiellement définirContext
dans le premier paramètre et la classe de destination dans le deuxième paramètre. Selon laIntent
méthode dans le code source -Comme vous pouvez le voir, nous devons passer le
Class<?>
type dans le deuxième paramètre.En écrivant,
Intent(this, Page2)
nous ne spécifions jamais que nous allons passer la classe, nous essayons de passer leclass
type qui n'est pas acceptable.Utilisez
::class.java
qui est une alternative à.class
dans kotlin. Utilisez le code ci-dessous pour démarrer votreActivity
Exemple -
la source
::class.java
lieu de.class
? L'approche Kotlin est inhabituellement compliquée par rapport à Java.class
renvoie un KotlinKClass
, mais Android attend un JavaClass<...>
, d'où la.java
propriété.Vous pouvez simplement démarrer un
Activity
inKOTLIN
en utilisant cette méthode simple,la source
putExtra
méthode. Je viens de l'ajouter pour passer des valeurs lors du démarrage de nouveauActivity
Pour démarrer une nouvelle activité,
Alors changez votre code en:
la source
Vous pouvez généralement simplifier la spécification du paramètre
BlahActivity::class.java
en définissant une fonction générique réifiée en ligne.Parce que ça te laisse faire
Ou encore plus simple
Alors c'est maintenant
la source
inline fun <reified T: Activity> Context.createIntent(vararg extras: Pair<String, Any?>) = Intent(this, T::class.java).apply { putExtras(bundleOf(*extras)) }
lieu de ce que j'ai dit et cela fonctionnera (en supposant que vous ayezbundleOf
d'Android-ktx ou d'anko)Vous devez donner le deuxième argument de type classe. Vous pouvez également l'avoir un peu plus rangé comme ci-dessous.
la source
Essaye ça
la source
C'est mon activité principale où je prends le nom d'utilisateur et le mot de passe de modifier le texte et le paramètre à l'intention
C'est ma deuxième activité où je dois recevoir des valeurs de l'activité principale
la source
Cela est dû au fait que votre
Page2
classe n'a pas d'objet compagnon similaire à celuistatic
de Java afin d'utiliser votre classe. Pour passer votre classe en argumentIntent
, vous devrez faire quelque chose comme çala source
De l'activité à l'activité
Du fragment à l'activité
la source
Eh bien, j'ai trouvé que ces 2 façons sont les plus simples de tous les résultats:
Voie n ° 1:
Voie n ° 2: (de manière générique)
la source
la source
J'ai eu un problème similaire, j'ai commencé à écrire mon application dans Kotlin, après avoir réécrit l'une de mes activités, je voulais voir s'il y avait des problèmes, le problème était que je ne savais pas comment envoyer une intention du fichier java à kotlin fichier.
Dans ce cas, j'ai créé une fonction statique dans kotlin (objet compagnon), cette fonction obtient un contexte (à partir de l'activité actuelle) et renvoie la nouvelle intention tout en utilisant le contexte actuel (contexte "java") tout en utilisant la classe kotlin (" :: class.java ").
Voici mon code:
la source
@JvmStatic
à votrenewIntent
méthode, vous pouvez l'appeler depuis java sans laCompanion
partie.Détails
Étape 1. Application ()
Étape 2. Ajouter un objet Routeur
Usage
la source
N'oubliez pas d'ajouter l'activité que vous souhaitez présenter, à la vôtre
AndroidManifest.xml
aussi :-) C'était le problème pour moi.la source
Pourquoi ne pas envisager l'encapsulation?
Par exemple:
la source
Vous pouvez utiliser à la fois des fichiers Kotlin et Java dans votre application.
Pour basculer entre les deux fichiers, assurez-vous de leur donner une <action android: name = "" unique dans AndroidManifest.xml, comme ceci:
Ensuite, dans votre MainActivity.kt (fichier Kotlin), pour démarrer une activité écrite en Java, procédez comme suit:
Dans votre MainActivityJava.java (fichier Java), pour démarrer une activité écrite en Kotlin, procédez comme suit:
la source
un autre moyen simple de naviguer vers une autre activité est
la source