Android - Comment réaliser setOnClickListener dans Kotlin?

101

Je voulais savoir comment nous définissons onClickListener de base dans Kotlin pour le développement Android.

Anirudh Agarwal
la source
6
Comment cette question peut-elle avoir 43 voix?
Hugo Allexis Cardona
5
C'est probablement populaire parce qu'Android Studio convertit le Java en button.setOnClickListener(object : View.OnClickListener { override fun onClick(v: View) { /*do work*/} }), puis fournit un avis sur leur code généré que nous devrions le convertir en lambda.
Joe Lapp
6
Kotlin est sacrément peu intuitif.
Je
2
Pourquoi tout le monde publie 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 sa réputation.
Aziz

Réponses:

69

Supposons que vous ayez textView sur lequel cliquer

text_view.text = "Hello Kotlin";

text_view.setOnClickListener {
    val intent = Intent(this@MainActivity, SecondActivity::class.java)
    intent.putExtra("key", "Kotlin")
    startActivity(intent)
}
Vinod Pattanshetti
la source
1
Oh oui! L'inférence de type prend soin de tous les bits désordonnés. Merci!
Joe Lapp
45

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)

code clickListener .

val clickListener = View.OnClickListener {view ->

    when (view.getId()) {
        R.id.textview -> firstFun()
        R.id.button -> secondFun()
    }
}
Akash Patel
la source
28

Voici un exemple d'utilisation de onClickListener dans Kotlin

button1.setOnClickListener(object : View.OnClickListener{
            override fun onClick(v: View?) {
                //Your code here
            }})
Alf Moh
la source
tous semblent proches, l '"objet" n'est pas entre accolades, évidemment. J'ai perdu un peu de mon temps
M. Usman Khan
25

Méthode 1:

txtNext.setOnClickListener {
        val intent = Intent(applicationContext, SecondActivity::class.java)
        startActivity(intent)
    }

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 -> {
            val intent = Intent(applicationContext, SecondActivity::class.java)
            startActivity(intent)
        }
        else -> {
            // else condition
        }
    }
  }
}
Ronak Thakkar
la source
24

Il existe cinq façons d'utiliser SetOnClickListener:

Première:

button.setOnClickListener {
    // Do some work here
}

Seconde:

button.setOnClickListener(object : View.OnClickListener {
    override fun onClick(view: View?) {
        // Do some work here
    }

})

Troisième:

button.setOnClickListener(View.OnClickListener { view ->
    // Do some work here
})

Quatrièmement:

class MainActivity : AppCompatActivity(), View.OnClickListener{

    lateinit var button : Button

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        button = findViewById(R.id.button1)
        button.setOnClickListener(this)
    }

    override fun onClick(view: View?) {
        when(view?.id){
            R.id.button1->{
                // do some work here
            }
        }
    }
}

Cinquième:

class MainActivity : AppCompatActivity(){

    lateinit var button : Button

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        button = findViewById(R.id.button1)
        button.setOnClickListener(listener)
    }

    val listener= View.OnClickListener { view ->
        when (view.getId()) {
            R.id.button1 -> {
                // Do some work here
            }
        }
    }
}

À votre santé!

Naimatullah
la source
15

Pour utiliser plusieurs identifiants:

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

Créez 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()
        }
    }
}
Luvnish Monga
la source
Il lance nullPointerException dans mon cas. Pouvez-vous m'aider
MashukKhan
vérifiez vos identifiants de vue, assurez-vous qu'ils existent dans un fichier xml.
Luvnish Monga
Ils existent en xml
MashukKhan
Partager votre source inclut XML.
Luvnish Monga
6

Vous devez d'abord obtenir la référence à la vue (par exemple Button, TextView, etc.) et définir un OnClickListener sur la référence à l'aide de la méthode setOnClickListener ()

// get reference to button
val btn_click_me = findViewById(R.id.btn_click_me) as Button
// set on-click listener
btn_click_me.setOnClickListener {
    Toast.makeText(this@MainActivity, "You clicked me.", Toast.LENGTH_SHORT).show()
}

Reportez-vous à l' exemple Kotlin SetOnClickListener pour un exemple complet de Kotlin Android où un bouton est présent dans une activité et OnclickListener est appliqué au bouton. Lorsque vous cliquez sur le bouton, le code à l'intérieur du bloc SetOnClickListener est exécuté.

Mettre à jour

Vous pouvez maintenant référencer le bouton directement avec son identifiant en incluant l'instruction d'importation suivante dans le fichier de classe. Documentation .

import kotlinx.android.synthetic.main.activity_main.*

puis pour le bouton

btn_click_me.setOnClickListener {
    // statements to run when button is clicked
}

Reportez-vous au didacticiel Android Studio .

Mallikarjun M
la source
5

Utilisez ce code pour ajouter onClickListenerdans Kotlin

val button : Button = getView()?.findViewById<Button>(R.id.testButton) as Button
button.setOnClickListener {view ->
         Toast.makeText(context, "Write your message here", Toast.LENGTH_LONG).show()
    }
}
ambreesh kushwaha
la source
5

Vous pouvez simplement obtenir OnClickListener dans kotlin

view1.setOnClickListener{

//body 

}
Android Geek
la source
5

Je vois beaucoup de suggestions ici, mais cette collection manque les suivantes.

button.setOnClickListener(::onButtonClicked)

et dans la classe actuelle, nous avons une méthode comme celle-ci:

private fun onButtonClicked(view: View) {
     // do stuff
}
hadilq
la source
5

var tv = findViewById(R.id.tv) comme TextView

    tv.setOnClickListener {
       val i = Intent(this@MainActivity, SecondActivity::class.java)
       startActivity(i)
       finish()
    }
CHANDAN KUMAR
la source
s'il vous plaît utiliser celui-ci très facile (définir l'id, cliquer sur l'auditeur et naviguer d'une classe vers une autre classe)
CHANDAN KUMAR
Bienvenue dans Stack Overflow! Veuillez ne pas simplement lancer votre code source ici. Soyez gentil et essayez de donner une belle description à votre réponse, afin que les autres l'aiment et la votent. Voir: Comment rédiger une bonne réponse?
sɐunıɔ ןɐ qɐp
4
    val button = findViewById<Button>(R.id.button)
    button.setOnClickListener {
        val intent = 
    Intent(this@MainActivity,ThirdActivity::class.java)
        intent.putExtra("key", "Kotlin")
        startActivity(intent)
    }
Vinay John
la source
3
**i have use kotlin-extension so i can access directly by button id:**


btnSignIN.setOnClickListener {
            if (AppUtils.isNetworkAvailable(activity as BaseActivity)) {
                if (checkValidation()) {

                    hitApiLogin()
                }
            }
        }
abhilasha Yadav
la source
3

Un moyen simple serait d'enregistrer un écouteur de clic et de créer un écouteur de clic avec une expression lambda.

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

    // click listener registered
    myButton.setOnClickListener(clickListener)
}

Et implémentez clickListener:

private val clickListener: View.OnClickListener = View.OnClickListener { _ ->
    // do something here
}

Vous pouvez remplacer _par un nom si vous avez besoin de la vue pour l'utiliser. Par exemple, vous devez vérifier l'ID de l'écouteur de clic.

private val clickListener: View.OnClickListener = View.OnClickListener { view ->
    if(view.id == login.id) {
        // do something here
    }
}
Maihan Nijat
la source
2

Il existe plusieurs façons d'y parvenir, comme le montre la variété des réponses à cette question.

Pour affecter réellement l'auditeur à la vue, vous utilisez les mêmes méthodes que vous le feriez en Java:

button.setOnClickListener()

Cependant, Kotlin facilite l'attribution d'un lambda en tant qu'auditeur:

button.onSetClickListener {
    // Listener code
}

Sinon, si vous souhaitez utiliser cet écouteur pour plusieurs vues, envisagez une expression lambda (un lambda affecté à une variable / valeur pour référence):

val buttonClickListener = View.OnClickListener { view ->
    // Listener code
}

button.setOnClickListener(buttonClickListener)
another_button.setOnClickListener(buttonClickListener)
RedBassett
la source
2

Faites simplement comme ci-dessous:

button.setOnClickListener{doSomething()}

Kishan V
la source
2
   button.setOnClickListener {
          //write your code here
   }
Resmi Venugopal
la source
Cette réponse est la même que les précédentes.
Pochmurnik
1

Vous utilisez comme ça onclickListener dans kotlin

val fab = findViewById(R.id.fab) as FloatingActionButton
fab.setOnClickListener {  
...
}
Shivam Sharma
la source
1
findViewById<Button>(R.id.signUp)?.setOnClickListener(
    Toast.makeText(mActivity, "Button Clicked", Toast.LENGTH_LONG).show()
)
user3694157
la source
1

Voici la solution. Votre code aimera ceci:

button.setOnClickListener {
            //your code here
        }

Pas besoin d'ajouter quoi que ce soit. comme ci-dessous:

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

}
Faxriddin Abdullayev
la source
0

Commencez par trouver le bouton, pour empêcher la distribution de la, Viewvous pouvez utiliser le <>comme suit:

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

Une fois que vous avez une instance de Button, vous pouvez maintenant attacher l'écouteur de clic comme suit:

button.setOnClickListener {  
 // You code here
}
Joseph
la source
0
val saveButton:Button = findViewById(R.id.button_save)

saveButton.setOnClickListener{
// write code for click event
}

with view object
saveButton.setOnClickListener{
view -> // write code for click event
}
Ajay Prajapati
la source
0

Le moyen le plus simple que je connaisse pour y parvenir est d'utiliser les extensions Kotlin Android.

Sur votre application / build.gradle

apply plugin: 'kotlin-android-extensions'

Si votre bouton s'appelle 'btnAdd', alors sur votre fragment ou activité, importez les éléments suivants:

import kotlinx.android.synthetic.main.fragment_transactions.btnAdd

 override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    btnAdd.setOnClickListener {
        Toast.makeText(context , "Done", 10).show()
    }
}
Isijara
la source
0

Si vous voulez simuler l'ancienne méthode anonyme dans Kotlin, j'ai trouvé que cela fonctionnait parfaitement.

 btnNewWay!!.setOnClickListener(object:View.OnClickListener {
    override fun onClick(v: View?) {
        //Your Code Here!
    }})
user2288580
la source
0

Ajouter clickListener sur un bouton comme celui-ci

    btUpdate.setOnClickListener(onclickListener)

ajoutez ce code dans votre activité

 val onclickListener: View.OnClickListener = View.OnClickListener { view ->
        when (view.id) {
            R.id.btUpdate -> updateData()


        }
    }
Jyot
la source
-1

Vous pouvez utiliser setOnClickListener comme ceci dans Kotlin

button.setOnClickListener(View.OnClickListener {        
       //code
})
Marium Jawed
la source