Android - Wie erreicht man setOnClickListener in Kotlin?

101

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

Anirudh Agarwal
quelle
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)
}
Vinod Pattanshetti
quelle
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()
    }
}
Akash Patel
quelle
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
            }})
Alf Moh
quelle
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
        }
    }
  }
}
Ronak Thakkar
quelle
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!

Naimatullah
quelle
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()
        }
    }
}
Luvnish Monga
quelle
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 .

Mallikarjun M.
quelle
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()
    }
}
Ambreesh Kushwaha
quelle
5

Sie können OnClickListener einfach in Kotlin herunterladen

view1.setOnClickListener{

//body 

}
Android Geek
quelle
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
}
hadilq
quelle
5

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

    tv.setOnClickListener {
       val i = Intent(this@MainActivity, SecondActivity::class.java)
       startActivity(i)
       finish()
    }
CHANDAN KUMAR
quelle
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)
    }
Vinay John
quelle
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
quelle
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
    }
}
Maihan Nijat
quelle
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)
RedBassett
quelle
2

Gehen Sie einfach wie folgt vor:

button.setOnClickListener{doSomething()}

Kishan V.
quelle
2
   button.setOnClickListener {
          //write your code here
   }
Resmi Venugopal
quelle
Diese Antwort ist dieselbe wie bei früheren.
Pochmurnik
1

Sie verwenden so onclickListener in kotlin

val fab = findViewById(R.id.fab) as FloatingActionButton
fab.setOnClickListener {  
...
}
Shivam Sharma
quelle
1
findViewById<Button>(R.id.signUp)?.setOnClickListener(
    Toast.makeText(mActivity, "Button Clicked", Toast.LENGTH_LONG).show()
)
user3694157
quelle
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 {

}
Faxriddin Abdullayev
quelle
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
}
Joseph
quelle
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
quelle
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()
    }
}
Isijara
quelle
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!
    }})
user2288580
quelle
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()


        }
    }
Jyot
quelle
-1

Sie können setOnClickListener wie folgt in Kotlin verwenden

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