176 votes

Android - Comment réaliser setOnClickListener en Kotlin ?

Je voulais savoir comment définir un onClickListener de base dans Kotlin pour le développement d'Android.

6 votes

C'est probablement populaire parce qu'Android Studio convertit le Java en button.setOnClickListener(object : View.OnClickListener { override fun onClick(v: View) { /*do work*/} }) et fournit ensuite un avis sur le code généré, indiquant que nous devons le convertir en un lambda.

12 votes

Kotlin est sacrément peu intuitif. Je ne sais pas pourquoi Google y investit autant.

6 votes

Pourquoi tout le monde affiche la même réponse avec une légère différence ? La réponse est simple view.setOnClickListener { ... } . On dirait que tout le monde est si désireux de gagner une réputation.

85voto

Supposons que vous ayez un textView à cliquer

text_view.text = "Hello Kotlin";

text_view.setOnClickListener {
    val intent = Intent(this@MainActivity, SecondActivity::class.java)
    intent.putExtra("key", "Kotlin")
    startActivity(intent)
}

3 votes

Oh oui ! L'inférence de type s'occupe de toutes les parties désordonnées. Merci !

1 votes

Quelqu'un peut-il m'indiquer cette façon d'appeler des méthodes avec des arguments d'interface fonctionnelle en Kotlin ? Normalement, en Java, j'aurais simplement fait textView.SetOnClickListener(view -> { doSomething() }) ;

59voto

Akash Patel Points 1901

Utilisez le code ci-dessous

val textview = findViewById<TextView>(R.id.textview)
textview.setOnClickListener(clickListener)

val button = findViewById<Button>(R.id.button)
button.setOnClickListener(clickListener)

clickListener code.

val clickListener = View.OnClickListener {view ->

    when (view.getId()) {
        R.id.textview -> firstFun()
        R.id.button -> secondFun()
    }
}

35voto

Alf Moh Points 3265

Voici un exemple d'utilisation de l'écouteur onClickListener en Kotlin.

button1.setOnClickListener(object : View.OnClickListener{
            override fun onClick(v: View?) {
                //Your code here
            }})

0 votes

Regardez bien, l'"objet" n'est pas entre crochets, évidemment. j'ai perdu un peu de mon temps.

32voto

Ronak Thakkar Points 1682

Méthode 1 :

txtNext.setOnClickListener {
        //Code statements
    }

Méthode 2 :

class FirstActivity : AppCompatActivity(), View.OnClickListener {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_first)
    txtNext.setOnClickListener(this)
}

override fun onClick(v: View) {
    when (v.id) {
        R.id.txtNext -> {
            //Code statements
        }
        else -> {
            // else condition
        }
    }
  }
}

14voto

Luvnish Monga Points 1341

Pour l'utilisation de plusieurs identifiants :

textview1.setOnClickListener(clickListener)
textview2.setOnClickListener(clickListener)

Créer une classe anonyme :

 private val clickListener: View.OnClickListener = View.OnClickListener { view ->
    when (view.id) {
        R.id.textview1-> { 
           Toast.makeText(this, "Clicked 1", Toast.LENGTH_SHORT).show()
        }
        R.id.textview2-> { 
           Toast.makeText(this, "Clicked 2", Toast.LENGTH_SHORT).show()
        }
    }
}

0 votes

Il jette nullPointerException dans mon cas. Pouvez-vous m'aider ?

0 votes

Vérifiez vos identifiants de vue, assurez-vous qu'ils existent dans le fichier xml.

0 votes

Ils existent en xml

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