114 votes

Kotlin Android démarrer une nouvelle activité

Je veux lancer une autre activité sur Android mais je reçois cette erreur :

Veuillez spécifier l'invocation du constructeur ; le classificateur 'Page2' n'a pas d'objet compagnon.

après avoir instancié le 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)
    }

}

204voto

rahul kapoor Points 1113

Pour lancer un Activity en java, nous avons écrit Intent(this, Page2.class) En fait, vous devez définir Context dans le premier paramètre et la classe de destination dans le second paramètre. D'après Intent dans le code source -

 public Intent(Context packageContext, Class<?> cls)

Comme vous pouvez le voir, nous devons passer Class<?> 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 class ce qui n'est pas acceptable.

Utilisez ::class.java qui est une alternative de .class en kotlin. Utilisez le code ci-dessous pour démarrer votre Activity

Intent(this, Page2::class.java)

Exemple -

val intent = Intent(this, NextActivity::class.java)
// To pass any data to next activity
intent.putExtra("keyIdentifier", value)
// start your next activity
startActivity(intent)

38voto

Vous pouvez tout simplement lancer un Activity sur KOTLIN en utilisant cette méthode simple,

val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("key", value)
startActivity(intent)

32voto

flutterfire.dev Points 1136

Pour commencer une nouvelle activité ,

startActivity(Intent(this@CurrentClassName,RequiredClassName::class.java)

Changez donc votre code en :

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

    fun buTestUpdateText2 (view: View) {
        startActivity(Intent(this@MainActivity,ClassName::class.java))

        // Also like this 

        val intent = Intent(this@MainActivity,ClassName::class.java)
        startActivity(intent)
    }

11voto

Adib Faramarzi Points 1189

Vous devez donner le deuxième argument du type de classe. Vous pouvez aussi le faire de manière un peu plus ordonnée comme ci-dessous.

startActivity(Intent(this, Page2::class.java).apply {
    putExtra("extra_1", value1)
    putExtra("extra_2", value2)
    putExtra("extra_3", value3)
})

7voto

Boris Points 302

Essayez ceci

val intent = Intent(this, Page2::class.java)
startActivity(intent)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X