Android - Bagaimana cara mencapai setOnClickListener di Kotlin?

104

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

Anirudh Agarwal
sumber
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)
}
Vinod Pattanshetti
sumber
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()
    }
}
Akash Patel
sumber
28

Berikut adalah contoh tentang cara menggunakan onClickListener di Kotlin

button1.setOnClickListener(object : View.OnClickListener{
            override fun onClick(v: View?) {
                //Your code here
            }})
Alf Moh
sumber
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!

Naimatullah
sumber
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
        }
    }
  }
}
Ronak Thakkar
sumber
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()
        }
    }
}
Luvnish Monga
sumber
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 .

Mallikarjun M
sumber
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()
    }
}
ambreesh kushwaha
sumber
5

Cukup Anda bisa mendapatkan OnClickListener di kotlin

view1.setOnClickListener{

//body 

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

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

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

Cukup lakukan seperti di bawah ini:

button.setOnClickListener{doSomething()}

Kishan V
sumber
2
   button.setOnClickListener {
          //write your code here
   }
Resmi Venugopal
sumber
Jawaban ini sama dengan jawaban sebelumnya.
Pochmurnik
1

Anda menggunakan onclickListener seperti itu di kotlin

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

}
Faxriddin Abdullayev
sumber
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
}
Joseph
sumber
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
sumber
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()
    }
}
isijara
sumber
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!
    }})
pengguna2288580
sumber
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()


        }
    }
Jyot
sumber
-1

Anda dapat menggunakan setOnClickListener seperti ini di Kotlin

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