안드로이드 코틀린 : 여러 개의 버튼 리스너 한 번에 처리하기 View.OnClickListener
Lucy Archive
Lucy / Facilitate4U
2021. 4. 19. 23:51

Android Kotlin : 다수의 버튼 이벤트를 하나의 리스너로 처리하기

이 포스트는

여러개의 버튼을 하나의 리스너로 처리

하는 방법입니다. 다수의 버튼을 사용하는 경우, 이 방법으로 가독성이 높은 코드를 작성할 수 있습니다. 

 

View.OnClickListener 인터페이스 사용하기

프로젝트 생성

아래와 같이 프로젝트를 생성합니다.

  • 템플릿 : Empty Activity
  • 프로젝트명 : OnClickListener
  • 언어 : Kotlin

 

ViewBinding 설정

코틀린 코드에서 레이아웃 XML파일을 바인딩하기 위해 App > Gradle Scripts > build.gradle 에서 ViewBinding 설정 코드를 추가합니다. 설정이 완료되면 Sync Now를 클랙해 변경 사항을 저장합니다. 이 방법을 사용하면 코틀린 코드에서 특정 레이아웃 파일의 View Id로 접근 가능합니다.

android { 
	... 
    viewBinding { 
    	enabled = true 
    } 
}

Gragle 수정 사항 적용

VIewBinding 설정 및 Activity 및 Fragment의 사용법은 아래의 링크를 참고하세요.

안드로이드 View Binding 사용하기

 

안드로이드 View Binding 사용하기 - kotlin-android-extensions 지원 중단

안드로이드 View Binding 방법 정리 안드로이드 코드에서 레이아웃 View에 접근하기 위해 사용된 kotlin-android-extensions 의 지원이 중단예정으로, 이를 대체하여 사용 할 수 있는 ViewBinding 사용법에 대해

juahnpop.tistory.com

 

activity_main.xml 코드 작성

activity_main.xml 레이아웃 파일에 아래의 7개 버튼을 추가합니다.

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

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="button1"
        android:layout_margin="10dp"/>

    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="button2"
        android:layout_margin="10dp"/>

    <Button
        android:id="@+id/button3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="button3"
        android:layout_margin="10dp"/>

    <Button
        android:id="@+id/button4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="button4"
        android:layout_margin="10dp"/>

    <Button
        android:id="@+id/button5"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="button5"
        android:layout_margin="10dp"/>

    <Button
        android:id="@+id/button6"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="button6"
        android:layout_margin="10dp"/>

    <Button
        android:id="@+id/button7"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="button7"
        android:layout_margin="10dp"/>

</LinearLayout>

 

MainActivity.kt 코드 작성

MainActivity.kt 코드는 아래와 같이 작성합니다. 주요 코드 설명은 아래와 같습니다. binding 으로 시작하는 ViewBinding 코드는 위의 링크를 참조해주세요.

  • 9번 줄 : MainActivity에 View.OnClickListener 인터페이스 추가
  • 19~25번 줄 : 버튼의 클릭 이벤트 리스너에 this를 등록, this는 궁극적으로 onClick 콜백 함수를 의미합니다.
  • 28~38번 줄 : Ctrl + I 를 눌러 onClick 콜백 함수를 Override 후 버튼 리스너 코드 작성
package com.blacklog.onclicklistener

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Toast
import com.blacklog.onclicklistener.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity(), View.OnClickListener {

    lateinit var binding : ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)

        binding.button1.setOnClickListener(this)
        binding.button2.setOnClickListener(this)
        binding.button3.setOnClickListener(this)
        binding.button4.setOnClickListener(this)
        binding.button5.setOnClickListener(this)
        binding.button6.setOnClickListener(this)
        binding.button7.setOnClickListener(this)
    }

    override fun onClick(v: View?) {
        when(v?.id){
            binding.button1.id -> toast("Button1 Clicked")
            binding.button2.id -> toast("Button2 Clicked")
            binding.button3.id -> toast("Button3 Clicked")
            binding.button4.id -> toast("Button4 Clicked")
            binding.button5.id -> toast("Button5 Clicked")
            binding.button6.id -> toast("Button6 Clicked")
            binding.button7.id -> toast("Button7 Clicked")
        }
    }

    private fun toast(string : String){
        Toast.makeText(this, string, Toast.LENGTH_SHORT).show()
    }
}

※ 토스트 팝업 메세지 사용법 및 전역 함수로 사용하는 방법이 필요하신 분은 아래의 링크를 참조해주세요.

토스트(Toast) 팝업 메세지 사용법 및 전역 함수로 사용법

 

안드로이드 코틀린 : 토스트(Toast) 팝업 메세지 사용법 및 전역 함수로 사용법

Android Kotlin : Toast Message 안드로이드에서 간단한 알림으로 많이 사용되는 Toast 메세지 사용 방법과 기타 편리하게 사용 할 수 있는 방법(전역 함수)에 대해 설명 합니다. Toast 팝업 메세지는? Toast

juahnpop.tistory.com

 

실행결과

위 코드를 실행하면 아래 그림과 같이 클릭하는 버튼이 클릭 되었음을 토스트 메세지로 출력되는 것을 확인 할 수 있습니다.

실행 결과

끝까지 읽어 주셔서 감사합니다.^^

관련포스트

🤞 안드로이드(코틀린) 앱 제작하기 관련글 목록 보기

🤞 안드로이드(코틀린) 팁 관련글 목록 보기