Android - Wie erreicht man setOnClickListener in Kotlin?


101

Ich wollte wissen, wie wir den grundlegenden onClickListener in Kotlin für die Android-Entwicklung einstellen.


6
Wie kann diese Frage 43 Stimmen haben?
Hugo Allexis Cardona

5
Es ist wahrscheinlich beliebt, weil Android Studio Java in Java konvertiert button.setOnClickListener(object : View.OnClickListener { override fun onClick(v: View) { /*do work*/} })und dann einen Hinweis zu dem generierten Code gibt, den wir in ein Lambda konvertieren sollten.
Joe Lapp

6
Kotlin ist verdammt unintuitiv. Keine Ahnung, warum Google so viel investiert
Codezombie

2
Warum posten alle die gleiche Antwort mit einem kleinen Unterschied? Die Antwort ist einfach view.setOnClickListener { ... }. Es scheint, als ob jeder so eifrig ist, sich einen guten Ruf zu verdienen.
Aziz

Antworten:


68

Angenommen, Sie müssen auf textView klicken

text_view.text = "Hello Kotlin";

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

1
Oh ja! Die Typinferenz beseitigt alle unordentlichen Teile. Vielen Dank!
Joe Lapp

45

Verwenden Sie den folgenden Code

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()
    }
}

28

Hier ist ein Beispiel für die Verwendung des onClickListener in Kotlin

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

alle schauen genau hin, das "Objekt" steht offensichtlich nicht in geschweiften Klammern. Ich habe einen Teil meiner Zeit verschwendet
M. Usman Khan

24

Methode 1:

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

Methode 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
        }
    }
  }
}

23

Es gibt fünf Möglichkeiten, SetOnClickListener zu verwenden:

Zuerst:

button.setOnClickListener {
    // Do some work here
}

Zweite:

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

})

Dritte:

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

Viertens:

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
            }
        }
    }
}

Fünfte:

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
            }
        }
    }
}

Prost!


15

Für die Verwendung mehrerer IDs:

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

Anonyme Klasse erstellen:

 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()
        }
    }
}

In meinem Fall wird nullPointerException ausgelöst. Können Sie mir helfen
MashukKhan

Überprüfen Sie Ihre Ansichts-IDs und stellen Sie sicher, dass sie in einer XML-Datei vorhanden sind.
Luvnish Monga

Sie existieren in xml
MashukKhan

Teilen Sie Ihre Quelle enthält XML.
Luvnish Monga

6

Zuerst müssen Sie den Verweis auf die Ansicht abrufen (z. B. Button, TextView usw.) und einen OnClickListener mit der Methode setOnClickListener () auf den Verweis setzen

// 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()
}

Im Kotlin SetOnClickListener-Beispiel finden Sie ein vollständiges Kotlin-Android-Beispiel, in dem eine Schaltfläche in einer Aktivität vorhanden ist und OnclickListener auf die Schaltfläche angewendet wird. Wenn Sie auf die Schaltfläche klicken, wird der Code im SetOnClickListener-Block ausgeführt.

Aktualisieren

Jetzt können Sie die Schaltfläche direkt mit ihrer ID referenzieren, indem Sie die folgende Importanweisung in die Klassendatei aufnehmen. Dokumentation .

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

und dann für den Knopf

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

Siehe Android Studio Tutorial .


5

Verwenden Sie diesen Code, um onClickListenerKotlin hinzuzufügen

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()
    }
}

5

Sie können OnClickListener einfach in Kotlin herunterladen

view1.setOnClickListener{

//body 

}

5

Ich sehe hier viele Vorschläge, aber dieser Sammlung fehlt Folgendes.

button.setOnClickListener(::onButtonClicked)

und in der aktuellen Klasse haben wir eine Methode wie diese:

private fun onButtonClicked(view: View) {
     // do stuff
}

5

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

    tv.setOnClickListener {
       val i = Intent(this@MainActivity, SecondActivity::class.java)
       startActivity(i)
       finish()
    }

Bitte verwenden Sie diese sehr einfach (ID festlegen, Listener klicken und eine Klasse zu einer anderen Klasse navigieren)
CHANDAN KUMAR

Willkommen bei Stack Overflow! Bitte werfen Sie nicht nur Ihren Quellcode hierher. Sei nett und versuche, deiner Antwort eine nette Beschreibung zu geben, damit andere sie mögen und sie positiv bewerten. Siehe: Wie schreibe ich eine gute Antwort?
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)
    }

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()
                }
            }
        }

3

Eine einfache Möglichkeit wäre, einen Klick-Listener zu registrieren und einen Klick-Listener mit einem Lambda-Ausdruck zu erstellen.

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

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

Und implementieren Sie die clickListener:

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

Sie können durch _einen Namen ersetzen, wenn Sie die Ansicht benötigen, um ihn zu verwenden. Beispielsweise müssen Sie die ID des Klick-Listeners überprüfen.

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

2

Es gibt verschiedene Möglichkeiten, dies zu erreichen, wie die verschiedenen Antworten auf diese Frage zeigen.

Um den Listener tatsächlich der Ansicht zuzuweisen, verwenden Sie dieselben Methoden wie in Java:

button.setOnClickListener()

Kotlin macht es jedoch einfach, ein Lambda als Zuhörer zuzuweisen:

button.onSetClickListener {
    // Listener code
}

Wenn Sie diesen Listener für mehrere Ansichten verwenden möchten, können Sie alternativ einen Lambda-Ausdruck in Betracht ziehen (ein Lambda, das einer Variablen / einem Wert als Referenz zugewiesen ist):

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

button.setOnClickListener(buttonClickListener)
another_button.setOnClickListener(buttonClickListener)

2

Gehen Sie einfach wie folgt vor:

button.setOnClickListener{doSomething()}



1

Sie verwenden so onclickListener in kotlin

val fab = findViewById(R.id.fab) as FloatingActionButton
fab.setOnClickListener {  
...
}

1
findViewById<Button>(R.id.signUp)?.setOnClickListener(
    Toast.makeText(mActivity, "Button Clicked", Toast.LENGTH_LONG).show()
)

1

Hier ist die Lösung. Ihr Code wird dies mögen:

button.setOnClickListener {
            //your code here
        }

Sie müssen nichts hinzufügen. Wie unten:

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

}

0

Suchen Sie zuerst die Schaltfläche, um die Besetzung zu verhindern. ViewSie können <>Folgendes verwenden:

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

Sobald Sie eine Instanz von haben Button, können Sie den Klick-Listener wie folgt anhängen:

button.setOnClickListener {  
 // You code here
}

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
}

0

Der einfachste Weg, den ich kenne, um dies zu erreichen, sind Kotlin Android Extensions.

Auf Ihrer App / build.gradle

apply plugin: 'kotlin-android-extensions'

Wenn Ihre Schaltfläche 'btnAdd' heißt, importieren Sie auf Ihrem Fragment oder Ihrer Aktivität Folgendes:

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()
    }
}

0

Wenn Sie den alten anonymen Weg in Kotlin simulieren möchten, fand ich, dass dies perfekt funktioniert hat.

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

0

Fügen Sie die ClickListener-Schaltfläche wie folgt hinzu

    btUpdate.setOnClickListener(onclickListener)

Fügen Sie diesen Code in Ihre Aktivität ein

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


        }
    }

-1

Sie können setOnClickListener wie folgt in Kotlin verwenden

button.setOnClickListener(View.OnClickListener {        
       //code
})
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.