Android - Bagaimana cara mencapai setOnClickListener di Kotlin?


104

Saya ingin tahu cara kami menetapkan onClickListener dasar di Kotlin untuk Pengembangan Android.


6
Bagaimana pertanyaan ini bisa memiliki 43 suara?
Hugo Allexis Cardona

5
Ini mungkin populer karena Android Studio mengonversi Java menjadi button.setOnClickListener(object : View.OnClickListener { override fun onClick(v: View) { /*do work*/} })dan kemudian memberikan nasihat tentang kode yang dihasilkan sehingga kita harus mengubahnya menjadi lambda.
Joe Lapp

6
Kotlin sangat tidak intuitif. Tidak tahu mengapa Google berinvestasi begitu banyak di dalamnya
codezombie

2
Mengapa semua orang memposting jawaban yang sama dengan sedikit perbedaan? Jawabannya sederhana view.setOnClickListener { ... }. Sepertinya semua orang sangat ingin mendapatkan reputasi.
Aziz

Jawaban:


69

Misalkan Anda memiliki textView untuk diklik

text_view.text = "Hello Kotlin";

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

1
Oh ya! Jenis inferensi menangani semua bit yang berantakan. Terima kasih!
Joe Lapp

46

Gunakan kode di bawah ini

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

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

kode clickListener .

val clickListener = View.OnClickListener {view ->

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

28

Berikut adalah contoh tentang cara menggunakan onClickListener di Kotlin

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

semua melihat dari dekat, "objek" tidak dalam tanda kurung kurawal, jelas. saya menyia-nyiakan sebagian waktu saya
M. Usman Khan

26

Ada lima cara untuk menggunakan SetOnClickListener:

Pertama:

button.setOnClickListener {
    // Do some work here
}

Kedua:

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

})

Ketiga:

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

Keempat:

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

Kelima:

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

Bersulang!


26

Metode 1:

txtNext.setOnClickListener {
        //Code statements
    }

Metode 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

Untuk menggunakan banyak id:

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

Buat kelas anonim:

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

Ini melempar nullPointerException dalam kasus saya. Bisakah Anda membantu saya
MashukKhan

periksa id tampilan Anda, pastikan ada file xml.
Luvnish Monga

Mereka ada dalam xml
MashukKhan

Bagikan sumber Anda termasuk XML.
Luvnish Monga

6

Pertama, Anda harus mendapatkan referensi ke View (katakanlah Button, TextView, dll.) Dan setel OnClickListener ke referensi menggunakan metode 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()
}

Lihat Contoh Kotlin SetOnClickListener untuk Contoh Kotlin Android lengkap di mana tombol ada dalam suatu aktivitas dan OnclickListener diterapkan ke tombol tersebut. Saat Anda mengklik tombol, kode di dalam blok SetOnClickListener dijalankan.

Memperbarui

Sekarang Anda dapat mereferensikan tombol secara langsung dengan id-nya dengan menyertakan pernyataan import berikut dalam file Class. Dokumentasi .

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

dan kemudian untuk tombolnya

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

Lihat Tutorial Android Studio .


5

Gunakan kode ini untuk menambahkan onClickListenerKotlin

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

Cukup Anda bisa mendapatkan OnClickListener di kotlin

view1.setOnClickListener{

//body 

}

5

Saya melihat banyak saran di sini, tetapi koleksi ini kehilangan yang berikut ini.

button.setOnClickListener(::onButtonClicked)

dan di kelas saat ini kami memiliki metode seperti ini:

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

5

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

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

tolong gunakan yang ini dengan sangat mudah (set id, klik listener dan navigasikan satu kelas ke kelas lain)
CHANDAN KUMAR

Selamat datang di Stack Overflow! Tolong jangan membuang kode sumber Anda di sini. Bersikaplah baik dan cobalah memberikan deskripsi yang bagus untuk jawaban Anda, sehingga orang lain akan menyukainya dan menyukainya. Lihat: Bagaimana cara menulis jawaban yang baik?
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

Cara sederhana adalah dengan mendaftarkan pemroses klik dan membuat pemroses klik dengan ekspresi lambda.

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

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

Dan terapkan clickListener:

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

Anda bisa mengganti _dengan nama jika Anda membutuhkan view untuk menggunakannya. Misalnya, Anda perlu memeriksa id pemroses klik.

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

2

Ada beberapa cara berbeda untuk mencapai ini, seperti yang ditunjukkan oleh variasi jawaban atas pertanyaan ini.

Untuk benar-benar menetapkan listener ke tampilan, Anda menggunakan metode yang sama seperti yang Anda lakukan di Java:

button.setOnClickListener()

Namun, Kotlin membuatnya mudah untuk menetapkan lambda sebagai pendengar:

button.onSetClickListener {
    // Listener code
}

Alternatifnya, jika Anda ingin menggunakan listener ini untuk beberapa tampilan, pertimbangkan ekspresi lambda (lambda yang ditetapkan ke variabel / nilai untuk referensi):

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

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

2

Cukup lakukan seperti di bawah ini:

button.setOnClickListener{doSomething()}



1

Anda menggunakan onclickListener seperti itu di 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

Berikut solusinya. Kode Anda akan seperti ini:

button.setOnClickListener {
            //your code here
        }

Tidak perlu menambahkan apapun. seperti dibawah ini:

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

}

0

Pertama temukan tombolnya, untuk mencegah cast dari ViewAnda dapat menggunakan <>sebagai berikut:

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

Setelah Anda memiliki instance Button, sekarang Anda dapat melampirkan click listener sebagai berikut:

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

Cara termudah yang saya tahu untuk mencapainya adalah melalui Ekstensi Android Kotlin.

Di app / build.gradle Anda

apply plugin: 'kotlin-android-extensions'

Jika tombol Anda disebut 'btnAdd', maka pada fragmen atau aktivitas Anda impor yang berikut ini:

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

Jika Anda ingin mensimulasikan cara anonim lama di Kotlin, saya menemukan ini berfungsi dengan sempurna.

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

0

Tambahkan clickListener pada tombol seperti ini

    btUpdate.setOnClickListener(onclickListener)

tambahkan kode ini dalam aktivitas Anda

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


        }
    }

-1

Anda dapat menggunakan setOnClickListener seperti ini di Kotlin

button.setOnClickListener(View.OnClickListener {        
       //code
})
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.