안드로이드 코틀린 : 여러 개의 버튼 리스너 한 번에 처리하기 View.OnClickListener
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
}
}
VIewBinding 설정 및 Activity 및 Fragment의 사용법은 아래의 링크를 참고하세요.
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) 팝업 메세지 사용법 및 전역 함수로 사용법
실행결과
위 코드를 실행하면 아래 그림과 같이 클릭하는 버튼이 클릭 되었음을 토스트 메세지로 출력되는 것을 확인 할 수 있습니다.
끝까지 읽어 주셔서 감사합니다.^^
'Programming > Android App(Kotlin)' 카테고리의 다른 글
안드로이드 코틀린 : 액티비티에서 볼륨 업/다운 키 이벤트 등록 - onKeyDown() 콜백 함수 (0) | 2021.04.27 |
---|---|
안드로이드 코틀린 : Pair, Triple, Data Class 여러 개의 반환 값을 가지는 메서드 또는 함수 만들기 (0) | 2021.04.21 |
안드로이드 코틀린 : 일반 클래스에서 Fragment의 메서드 사용하기 (0) | 2021.04.17 |
안드로이드 코틀린 : JetPack Navigation로 Fragment 전환 및 데이터 전송 기본 사용법 (0) | 2021.04.13 |
안드로이드 코틀린 : CustomView 생성하여 화면 터치 위치 원 그리기 (0) | 2021.04.12 |