Je voulais savoir comment nous définissions onClickListener de base dans Kotlin pour le développement Android.
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)
}
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()
}
}
Voici un exemple d'utilisation de l'outil onClickListener dans Kotlin
button1.setOnClickListener(object : View.OnClickListener{
override fun onClick(v: View?) {
//Your code here
})
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
}
}
}
}
Pour utiliser 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()
}
}
}
Utilisez ce code pour ajouter onClickListener
dans 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()
}
}
Je vois beaucoup de suggestions ici, mais cette collection manque le suivant.
button.setOnClickListener(::onButtonClicked)
et dans la classe actuelle, nous avons une méthode comme celle-ci:
private fun onButtonClicked(view: View) {
// do stuff
}
button.setOnClickListener {
//write your code here
}
Il existe plusieurs manières d'y parvenir, comme le montre la diversité des réponses à cette question.
Pour affecter réellement l'écouteur à la vue, vous utilisez les mêmes méthodes qu'en Java:
button.setOnClickListener()
Cependant, Kotlin facilite l'affectation d'un lambda en tant qu'auditeur:
button.onSetClickListener {
// Listener code
}
Sinon, si vous souhaitez utiliser cet écouteur pour plusieurs vues, considérons 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)
Simplement vous pouvez obtenir OnClickListener dans Kotlin
view1.setOnClickListener{
//body
}
Tout d'abord, vous devez 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()
}
Voir Kotlin SetOnClickListener, exemple pour obtenir un exemple complet de Kotlin Android, dans lequel un bouton est présent dans une activité et OnclickListener est appliqué au bouton. Lorsque vous cliquez sur le bouton, le code contenu dans le bloc SetOnClickListener est exécuté.
Mettre à jour
Vous pouvez maintenant référencer directement le bouton 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
}
Référez-vous Tutoriel Android Studio .
Vous utilisez comme ça onclickListener dans kotlin
val fab = findViewById(R.id.fab) as FloatingActionButton
fab.setOnClickListener {
...
}
Un moyen simple serait d'inscrire 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 la clickListener
:
private val clickListener: View.OnClickListener = View.OnClickListener { _ ->
// do something here
}
Vous pouvez remplacer _
par un nom si vous avez besoin que la vue l’utilise. Par exemple, vous devez vérifier l'id de l'écouteur de clics.
private val clickListener: View.OnClickListener = View.OnClickListener { view ->
if(view.id == login.id) {
// do something here
}
}
val button = findViewById<Button>(R.id.button)
button.setOnClickListener {
val intent =
Intent(this@MainActivity,ThirdActivity::class.Java)
intent.putExtra("key", "Kotlin")
startActivity(intent)
}
**i have use kotlin-extension so i can access directly by button id:**
btnSignIN.setOnClickListener {
if (AppUtils.isNetworkAvailable(activity as BaseActivity)) {
if (checkValidation()) {
hitApiLogin()
}
}
}
Ajouter clickListener sur un bouton comme celui-ci
btUpdate.setOnClickListener(onclickListener)
ajouter ce code dans votre activité
val onclickListener: View.OnClickListener = View.OnClickListener { view ->
when (view.id) {
R.id.btUpdate -> updateData()
}
}
Commencez par trouver le bouton. Pour éviter la conversion de la View
, vous pouvez utiliser le <>
comme suit:
val button = findViewById<Button>(R.id.button);
Une fois que vous avez une instance de la Button
, vous pouvez maintenant attacher l’écouteur de clics comme suit:
button.setOnClickListener {
// You code here
}
var tv = findViewById (R.id.tv) en tant que TextView
tv.setOnClickListener {
val i = Intent(this@MainActivity, SecondActivity::class.Java)
startActivity(i)
finish()
}
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
}
findViewById<Button>(R.id.signUp)?.setOnClickListener(
Toast.makeText(mActivity, "Button Clicked", Toast.LENGTH_LONG).show()
)
Si vous voulez simuler l'ancienne méthode anonyme à Kotlin, j'ai trouvé que cela fonctionnait parfaitement.
btnNewWay!!.setOnClickListener(object:View.OnClickListener {
override fun onClick(v: View?) {
//Your Code Here!
}})
Pour ce faire, le moyen le plus simple consiste à 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 ce qui suit:
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()
}
}