Android Kotlin Click Event

Notepad96

·

2021. 10. 7. 06:45

300x250

 

 

 

 


1. 결 과

결 과

 

 

 


2. activity_main.xml (메인 레이아웃)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btn01"
        style="@style/Widget.AppCompat.Button.Borderless"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:textColor="@color/black"
        android:text="Btn 01"/>

    <Button
        android:id="@+id/btn02"
        style="@style/Widget.AppCompat.Button.Borderless"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:textColor="@color/black"
        android:text="Btn 02"/>

    <Button
        android:id="@+id/btn03"
        style="@style/Widget.AppCompat.Button.Borderless"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:textColor="@color/black"
        android:text="Btn 03"

        android:onClick="btn03click"/>

</LinearLayout>

 

- btn03의 경우 Click Event를 함수로 선언하여 사용한다. 그래서 다른 버튼과 다르게 onClick을 추가해 준다.

 

 

 

 


3. MainActivity.kt

package com.example.clickevent

import android.os.Bundle
import android.view.View
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*

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

        btn01.setOnClickListener{
            Toast.makeText(this, "Btn1 Click!", Toast.LENGTH_SHORT).show()
        }

        btn02.setOnClickListener(clickListner)
    }

    val clickListner = View.OnClickListener { view ->
//        when(view.id)
        Toast.makeText(view.context, "Btn2 Click!", Toast.LENGTH_SHORT).show()
    }


    fun btn03click(view: View) {
        Toast.makeText(view.context, "Btn3 Click!", Toast.LENGTH_SHORT).show()
    }


}

 

 

ㄴ btn01

제네릭 방식을 사용하여 Click Event를 구현하였다.

 

해당 방식은 되도록이면 간단한 동작들을 작성하는 것이 가독성 면에서 좋다.

 

또한, 클릭 시 이벤트의 동작 중 다른 이벤트와 동작과 동일한 것이 있다면 코드의 재사용성이란 점에서 다른 방식을 고려해봐야 한다.

 

 

 

ㄴ btn02

ClickListener를 선언한 후 이를 사용하여 Click Event를 구현하였다.

 

해당 방식은 동일한 작업을 하는 버튼이 여럿 있다면 코드 재사용성을 높일 수 있는 좋은 방법이다.

 

또한, 위 예시에서 주석처리 되어있는 부분[when(view.id)] 처럼 Click한 View의 ID를 사용하여 구분함으로써 전체적인 동작 방식은 동일하지만 Click한 View에 따라서 약간의 다른 처리를 할 수도 있다.

 

 

 

ㄴ btn03

함수로 선언하여 Click Event를 구현하였다.

 

해당 방식을 사용하면 가장 가독성을 높일 수 있다.

 

또한, 2번 방식처럼 동일한 기능을 하는 버튼의 이벤트를 지정하여 코드를 재사용할 수 있으며 view의 id로 View의 따라서 약간의 처리를 다르게 할 수도 있다.

 

물론 여기서 말하는 약간이란 대략적은 동작은 동일한데 약간의 세부사항이 다를 경우 이를 구분하기 위해서라는 것이지 그렇지 않다면 분리된 다른 함수로 선언하는 것이 가독성 면에서 좋다.

 

 

 

 

 


4. 전 체 코 드

 

 

GitHub - Notepad96/BlogExample

Contribute to Notepad96/BlogExample development by creating an account on GitHub.

github.com

 

 

 

 

 

 

300x250