memulai-belajar-android-studio-bahasa-indonesia

Apa itu Event Listener di Android Studio

Sejauh ini mungkin kalian sudah belajar bagaimana menampilkan sebuah text ataupun tombol di layar.

Tetapi bagaimana cara mengetahui kalau tombol atau komponen yang kita masukkan di klik oleh user ?

Ibaratnya bagaimana aplikasi bereaksi jika suatu tombol atau komponen dipicu (misal di klik) oleh user.

Nah untuk itu yuk sama-sama belajar yang namanya event listener di Android Studio.

Jenis-Jenis event Listener di Android Studio

Tiap Event Listener punya fungsi yang berbeda-beda jadi tidak mungkin kita terapkan hanya satu buah event listener kedalam aplikasi kita nantinya.

Maka dari itu kali ini kita akan berkenalan dengan lima buah event listener yang menurut saya sering digunakan dalam setiap project, berikut daftarnya :

onClick()

Mungkin dari namanya kita sudah bisa menebak fungsi dari event listener ini yaitu “jika di Klik”.

Jadi kita menjalankan suatu fungsi jika suatu komponen (button, image dll ) diklik oleh user.

onLongClik()

Sama dengan onClick() bedanya hanya durasi kliknya saja seperti di klik satu detik atau lebih.

Kalau orang indo bilangnya sih “tombolnya di tahan”.

onFocusChange()

Event listener ini akan terpicu jika focusnya berpindah ke komponen lainnya.

Contohnya seperti kita mengisi form saat kita berpindah antar field ( input ) maka event listener ini akan terpicu.

onKey()

onKey adalah event listener yang akan terpicu jika key (tombol) pada ponsel seperti volume, power, dan juga huruf-huruf, enter, simbol yang ada di keyboard di tekan.

Kalau kalian perhatikan event listener ini juga banyak digunakan seperti pada aplikasi chatting yaitu “Tekan enter untuk mengirim pesan”.

Atau bisa juga kita atur tombol enter menuju ke field berikutnya, seperti memencet tombol tab di windows.

onTouch()

seperti namanya event listener ini menghandle segala urusan input Touch (sentuhan ke layar) dari user.

Contohnya ingin mendeteksi apakah ada input berupa touch.

Dan untuk developer yang sudah lanjut onTouch salah satunya bisa digunakan seperti drag and drop komponen.

Contoh Event Listener

Untuk mencoba Event listener (sesuai yang diatas) kita buat project baru atau gunakan yang sudah ada.

Kemudian desain dan atur komponen yang digunakan, saya akan buat seperti ini :

apa-itu-event-listener-di-android-studio-kotlin
Desain contoh aplikasi Event Listener di Android Studio

Dan disetiap komponennya diberikan ID agar bisa kita panggil secara terprogram.

Kemudian kita isikan sebuah fungsi di dalam button atau komponen lainnya dengan menggunakan event listener.

Isikan di onCreate kode berikut ini (nama id tiap komponennya silahkan ganti dengan punya kalian) :

class ContohListener : AppCompatActivity() {

    @SuppressLint("ClickableViewAccessibility")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_contoh_listener)
        
        klik1.setOnClickListener{
            TeksKlik.text = "Tombol di klik"
        }
		
		klik2.setOnClickListener{
            TeksKlik.text = "Tombol di klik"
        }

        TomKlikLong.setOnLongClickListener {
            TeksKlik.text ="Tahan Tombol Klik"
            true
        }

        fieldSatu.setOnFocusChangeListener { v, hasFocus->
            if(hasFocus) {
                Toast.makeText(this, "Kamu Berada di Field 1", Toast.LENGTH_SHORT).show()
            }
            else{
                Toast.makeText(this, "Kamu Keluar dari Field 1", Toast.LENGTH_SHORT).show()
            }
        }

        fieldOnkey.setOnKeyListener { v, keyCode, event ->
            if(keyCode == KeyEvent.KEYCODE_ENTER && event.action == KeyEvent.ACTION_UP){
                Toast.makeText(this, "Kamu tekan Enter", Toast.LENGTH_SHORT).show()
            }
            false
        }

        constrainSatu.setOnTouchListener { v, event ->
            when(event.action){
                MotionEvent.ACTION_DOWN -> touchPad.text = "Background disentuh.."
                MotionEvent.ACTION_UP -> touchPad.text = "Touch dilepas.."
                MotionEvent.ACTION_MOVE -> touchPad.text = "Touch Bergerak.."
            }
            true
        }
    }

Penjelasan pada onTouch() :

ACTION_DOWN = saat kita menekan.
ACTION_UP = saat jari kita tidak lagi menekan layar.
ACTION_MOVE = saat kita melakukan pergerakan di layar seperti drag.

Karena saat ini kita belum mengimplementasikan custom view maka pada baris 3 (SuppressLint) kita tuliskan untuk mencegah Warning saat menggunakan event listener onTouch(),

Kode di atas masih terlihat oke kalau tombol atau komponen yang digunakan masih berjumlah sedikit.

Tapi kalau dalam satu Activity punya lebih dari lima tombol/komponen misalkan, ada pendekatan yang lebih baik.

Yaitu kita gunakan Switch case (“when” di dalam kotlin) untuk mendeteksi id tombol/komponen apa yang sedang di tekan.

Jelasnya kita lihat kode dibawah ini :

class ContohListener : AppCompatActivity() , View.OnClickListener, View.OnLongClickListener,
    View.OnFocusChangeListener, View.OnKeyListener, View.OnTouchListener {

    @SuppressLint("ClickableViewAccessibility")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_contoh_listener)
        ListenerNyadiSetDisini()
 

    } //Akhir baris onCreate***************//

    private fun ListenerNyadiSetDisini(){
        klik1.setOnClickListener(this)
        klik2.setOnClickListener(this)
        TomKlikLong.setOnLongClickListener(this)
        fieldSatu.setOnFocusChangeListener(this)
        fieldOnkey.setOnKeyListener(this)
        constrainSatu.setOnTouchListener(this)
    }

    override fun onClick(v: View?) {
        when(v?.id){
            R.id.klik1 -> TeksKlik.text = "Klik Tombol 1"
            R.id.klik2 -> TeksKlik.text = "Klik Tombol 2"
        }
    }

    override fun onLongClick(v: View?): Boolean {
        when(v?.id){
            R.id.TomKlikLong -> TeksKlik.text ="Tahan Tombol Klik"
        }
        return true
    }

    override fun onFocusChange(v: View?, hasFocus: Boolean) {
        when(v?.id){
            R.id.fieldSatu ->{
                if(hasFocus) {
                    Toast.makeText(this, "Kamu Berada di Field 1", Toast.LENGTH_SHORT).show()
                }
                else{
                    Toast.makeText(this, "Kamu Keluar dari Field 1", Toast.LENGTH_SHORT).show()
                }
            }
            //Field lainnya, R.id.fieldDua -> bla bla bla, misalnya..
            //Field lainnya lagi
            //..
        }
    }

    override fun onKey(v: View?, keyCode: Int, event: KeyEvent?): Boolean {
        when(v?.id){
            R.id.fieldOnkey -> {
                if(keyCode == KeyEvent.KEYCODE_ENTER && event?.action == KeyEvent.ACTION_UP){
                    Toast.makeText(this, "Kamu tekan Enter", Toast.LENGTH_SHORT).show()
                }
            }
            //Field lainnya
            //..
        }
        return false
    }

    override fun onTouch(v: View?, event: MotionEvent?): Boolean {
        when(v?.id){
            R.id.constrainSatu -> {
                when(event?.action){
                    MotionEvent.ACTION_DOWN -> touchPad.text = "Background disentuh.."
                    MotionEvent.ACTION_UP -> touchPad.text = "Touch dilepas.."
                    MotionEvent.ACTION_MOVE -> touchPad.text = "Touch Bergerak.."
                }
            }
            //komponen/view lainnya
            //..
        }
        return true
    }
}

Hasil Akhirnya jika tidak ada error akan seperti berikut ini :

Leave a Reply

Your email address will not be published. Required fields are marked *