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.