Android - Kotlin'de setOnClickListener'a nasıl ulaşılır?


113

Android Geliştirme için Kotlin'de temel onClickListener'ı nasıl ayarladığımızı bilmek istedim.


6
Bu soru nasıl 43 oya sahip olabilir?
— Hugo Allexis Cardona

5
Muhtemelen popülerdir çünkü Android Studio, Java'yı dönüştürür button.setOnClickListener(object : View.OnClickListener { override fun onClick(v: View) { /*do work*/} })ve ardından üretilen kodlar hakkında onu bir lambda'ya dönüştürmemiz gereken bir tavsiye sağlar.
— Joe Lapp

6
Kotlin kesinlikle mantıksız. Google'ın neden bu kadar çok yatırım yaptığı hakkında hiçbir fikriniz yok
— codezombie

3
Neden herkes küçük bir farkla aynı cevabı veriyor? Cevap basit view.setOnClickListener { ... }. Görünüşe göre herkes itibar kazanmaya çok hevesli.
— Aziz

Yanıtlar:


72

Tıklamak için textView'iniz olduğunu varsayalım

text_view.text = "Hello Kotlin";

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

1
Ah evet! Tip çıkarımı, tüm dağınık parçaları ortadan kaldırır. Teşekkürler!
— Joe Lapp

49

Aşağıdaki kodu kullanın

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

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

clickListener kodu.

val clickListener = View.OnClickListener {view ->

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

29

İşte onClickListener'ın Kotlin'de nasıl kullanılacağına dair bir örnek

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

hepsi yakından bakıldığında, "nesne" açıkça süslü parantez içinde değil. zamanımın bir kısmını boşa harcadım
— M. Usman Khan

27

SetOnClickListener'ı kullanmanın beş yolu vardır:

İlk:

button.setOnClickListener {
    // Do some work here
}

İkinci:

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

})

Üçüncü:

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

İleri:

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

Beşinci:

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

Şerefe!


27

Yöntem 1:

txtNext.setOnClickListener {
        //Code statements
    }

Yöntem 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
        }
    }
  }
}

15

Birden çok kimlik kullanmak için:

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

Anonim sınıf oluşturun:

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

Benim durumumda nullPointerException atıyor. Bana yardım edebilir misin
— MashukKhan

görünüm kimliklerinizi kontrol edin, xml dosyası var olduğundan emin olun.
— Luvnish Monga

Bunlar
— xml'de

Kaynağınızın XML içerdiğini paylaşın.
— Luvnish Monga

6

Öncelikle, View referansını (örneğin Button, TextView vb.) Almanız ve setOnClickListener () yöntemini kullanarak referansa bir OnClickListener ayarlamanız gerekir.

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

Bir etkinlikte bir düğmenin bulunduğu ve düğmeye OnclickListener uygulandığı eksiksiz Kotlin Android Örneği için Kotlin SetOnClickListener Örneğine bakın . Düğmeye tıkladığınızda, SetOnClickListener bloğunun içindeki kod çalıştırılır.

Güncelleme

Artık, Class dosyasına aşağıdaki import ifadesini ekleyerek düğmeye doğrudan kimliğiyle başvurabilirsiniz. Belgeler .

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

ve sonra düğme için

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

Android Studio Eğitimine bakın .


5

onClickListenerKotlin'e eklemek için bu kodu kullanın

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

Basitçe OnClickListener'ı kotlin'de edinebilirsiniz

view1.setOnClickListener{

//body 

}

5

Burada birçok öneri görüyorum, ancak bu koleksiyonda aşağıdakiler eksik.

button.setOnClickListener(::onButtonClicked)

ve mevcut sınıfta şöyle bir yöntemimiz var:

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

5

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

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

lütfen bunu çok kolay bir şekilde kullanın (kimliği ayarlayın, dinleyiciye tıklayın ve bir sınıfı başka bir sınıfa gidin)
— CHANDAN KUMAR

Stack Overflow'a hoş geldiniz! Lütfen sadece kaynak kodunuzu buraya atmayın. Nazik olun ve cevabınıza güzel bir açıklama yapmaya çalışın, böylece diğerleri beğenecek ve oy verebilecektir. Bakınız: Nasıl iyi bir cevap yazabilirim?
— 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

Basit bir yol, bir tıklama dinleyicisini kaydetmek ve lambda ifadesine sahip bir tıklama dinleyicisi oluşturmaktır.

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

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

Ve clickListenerşunları uygulayın :

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

Kullanmak _için görünüme ihtiyacınız varsa bir adla değiştirebilirsiniz . Örneğin, tıklama dinleyicinin kimliğini kontrol etmeniz gerekir.

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

2

Bu soruya verilen çeşitli cevapların gösterdiği gibi, bunu başarmanın birkaç farklı yolu vardır.

Dinleyiciyi görünüme gerçekten atamak için, Java'da kullandığınız aynı yöntemleri kullanırsınız:

button.setOnClickListener()

Ancak Kotlin, bir lambda'yı dinleyici olarak atamayı kolaylaştırır:

button.onSetClickListener {
    // Listener code
}

Alternatif olarak, bu dinleyiciyi birden çok görünüm için kullanmak istiyorsanız, bir lambda ifadesini düşünün (başvuru için bir değişkene / değere atanmış bir lambda):

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

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

2

Aşağıdakileri yapmanız yeterlidir:

button.setOnClickListener{doSomething()}



1

Kotlin'de onclickListener gibi kullanıyorsunuz

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

İşte çözüm. Kodunuz şöyle olacak:

button.setOnClickListener {
            //your code here
        }

Hiçbir şey eklemenize gerek yok. aşağıdaki gibi:

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

}

0

Öncelikle butonu bulup, alçıyı önlemek için Viewşu şekilde kullanabilirsiniz <>:

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

Bir örneğine sahip Buttonolduğunuzda, artık tıklama dinleyicisini aşağıdaki gibi ekleyebilirsiniz:

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

Bunu başarmanın bildiğim en kolay yolu Kotlin Android Uzantılarıdır.

Uygulamanızda / build.gradle

apply plugin: 'kotlin-android-extensions'

Düğmenizin adı 'btnAdd' ise, parçanız veya etkinliğinizde aşağıdakileri içe aktarın:

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

Kotlin'de eski anonim yolu simüle etmek istiyorsanız, bunun mükemmel bir şekilde çalıştığını gördüm.

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

0

Bunun gibi düğmeye clickListener ekleyin

    btUpdate.setOnClickListener(onclickListener)

bu kodu aktivitenize ekleyin

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


        }
    }

-1

SetOnClickListener'ı Kotlin'de bu şekilde kullanabilirsiniz

button.setOnClickListener(View.OnClickListener {        
       //code
})
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.