Kotlin에서 setOnClickListener 사용
- Kotlin에서 새 프로젝트 생성 및 버튼 추가
-
Kotlin에서 콜백 없이
setOnClickListener()
사용 -
Kotlin에서 콜백과 함께
setOnCliclListener()
사용 -
Kotlin에서 Lambda 표현식과 함께
setOnClickListener()
사용 -
Kotlin의
MainActivity
클래스에서View.OnClickListener
인터페이스 사용
setOnClickListener()
메소드는 이벤트 리스너입니다. 즉, 버튼 클릭과 같은 이벤트가 발생한 경우에만 호출됩니다. setOnClickListener()
는 View
클래스의 메서드이며 이 클래스에서 상속되는 모든 클래스와 함께 사용할 수 있습니다.
이 자습서에서는 Button
을 사용하여 작동 중인 메서드를 테스트합니다. Button
클래스는 TextView
클래스의 메서드를 상속하며, View
기본 클래스의 메서드도 상속합니다.
Kotlin에서 새 프로젝트 생성 및 버튼 추가
개발 환경으로 이동하여 빈 활동이 있는 새 Android 프로젝트를 만듭니다. Kotlin이 이 애플리케이션에 대해 선택된 언어인지 확인하십시오.
Button
컴포넌트를 생성하려면 Layout 폴더 아래의 activity_main.xml
파일로 이동하여 ConstraintLayout
안에 다음 XML 코드를 붙여넣습니다.
<Button
android:text="Click me"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/click_me_btn"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
Kotlin에서 콜백 없이 setOnClickListener()
사용
Kotlin의 MainActivity
클래스로 이동하여 setContentView()
메서드 바로 뒤에 있는 onCreate()
메서드에 다음 코드를 붙여넣습니다.
val clickMeBtn: Button = findViewById(R.id.click_me_btn)
clickMeBtn.setOnClickListener {
val toast = Toast
.makeText(applicationContext,
"You have clicked me",
Toast.LENGTH_SHORT).show()
}
findViewById()
메서드는 해당 구성 요소에 고유한 ID를 사용하여 레이아웃에서 만든 버튼을 검색하는 데 도움이 됩니다. 이 메서드는 제네릭 메서드이기 때문에 View
클래스에서 상속된 모든 구성 요소를 검색할 수 있습니다.
setOnClickListener()
메소드는 콜백을 인수로 사용하지만 콜백을 전달하지 않고 이 메소드 내부에서 수행할 작업을 직접 추가합니다.
이는 메서드 뒤에 추가된 @Nullable
주석으로 가능합니다. 주석은 매개변수가 선택 사항이거나 null일 수 있음을 나타냅니다.
setOnClickListener()
메서드를 사용할 때 먼저 버튼을 클릭할 수 없는 경우 클릭할 수 있도록 설정합니다.
Toast
클래스의 makeText()
정적 메서드를 사용하여 텍스트를 생성했으며 이 메시지는 화면에 잠시 표시되었다가 사라집니다.
애플리케이션 실행
IDE 도구 모음의 오른쪽 상단에 있는 실행 아이콘을 눌러 응용 프로그램을 실행합니다. 다음 이미지는 실행 버튼의 위치를 보여줍니다.
그러면 응용 프로그램이 실행되고 가상 장치가 실행되고 가상 장치에 설치됩니다. CLICK ME
버튼을 누르면 아래와 같이 화면 하단에 You have clicked me
라는 메시지가 표시됩니다.
Kotlin에서 콜백과 함께 setOnCliclListener()
사용
이전 예에서 언급했듯이 setOnClickListener()
메소드에는 onClick()
메소드에 대한 콜백인 View.OnClickListener
옵션 매개변수가 있습니다.
MainActivity
클래스로 이동하여 setContentView()
메서드 바로 아래에 있는 onCreate()
메서드에 다음 코드를 붙여넣습니다. 이전 예에 대해 주석을 달아야 합니다.
val clickMeBtn: Button = findViewById(R.id.click_me_btn)
clickMeBtn.setOnClickListener(object : View.OnClickListener{
override fun onClick(view: View?) {
val toast = Toast
.makeText(applicationContext,
"You have clicked me",
Toast.LENGTH_SHORT).show()
}
})
위의 예에서 View.OnClickLictener
콜백을 메서드에 전달하고 onClick()
메서드를 재정의했습니다.
onClick()
메소드에는 클릭한 보기를 나타내는 View
유형의 매개변수가 있습니다. onClick()
내부의 보기를 사용하여 배경색 변경과 같은 모든 메서드를 실행할 수 있습니다.
이 예에서는 이전 예에서와 같이 Toast
메시지를 표시했습니다. 애플리케이션을 실행하고 테스트하는 데 사용한 것과 동일한 단계를 사용하면 동일한 결과를 얻을 수 있습니다.
Kotlin에서 Lambda 표현식과 함께 setOnClickListener()
사용
이 예제는 위에서 다룬 것과 유사하지만 콜백의 onClick()
메서드를 재정의하는 대신 람다 식으로 변환합니다.
MainActivity
클래스로 이동하여 setContentView()
메서드 바로 뒤에 있는 onCreate()
메서드에 다음 코드를 붙여넣습니다. 이전 예에 대해 주석을 달아야 합니다.
val clickMeBtn: Button = findViewById(R.id.click_me_btn)
clickMeBtn.setOnClickListener(View.OnClickListener { view ->
Toast.makeText(applicationContext,
"You have clicked me",
Toast.LENGTH_SHORT).show()
})
클릭한 view
에 액세스할 수 있으므로 모든 방법을 실행할 수 있지만 이 예에서는 Toast
메시지만 표시합니다.
첫 번째 예제를 실행하고 테스트하는 데 사용한 것과 동일한 단계를 사용하면 다른 예제에서 보았듯이 화면에 Toast
메시지가 표시됩니다.
Kotlin의 MainActivity
클래스에서 View.OnClickListener
인터페이스 사용
View.OnClickListener
콜백은 인터페이스이며 아래와 같이 MainActivity
클래스에서 이 인터페이스를 구현할 수 있습니다.
class MainActivity : AppCompatActivity(), View.OnClickListener {
}
인터페이스를 구현한 후에는 이 클래스 내에서 onClick()
메서드를 구현해야 합니다. MainActivity
클래스 내부에 다음 코드를 복사하여 붙여넣습니다.
override fun onClick(view: View?){
when(view?.id){
R.id.click_me_btn -> {
Toast.makeText(applicationContext,
"You have clicked me",
Toast.LENGTH_SHORT).show()
}
}
}
onClick()
메서드는 클릭한 보기에 대한 액세스를 제공하지만 id로 구성 요소를 검색하지 않으므로 switch
문과 동일한 방식으로 작동하는 when
문을 사용하여 식별해야 합니다. 클릭한 구성 요소입니다.
id
가 click_me_btn
의 id와 일치하면 화살표 함수 내에서 뒤에 오는 기능이 실행됩니다. 이 예에서는 화면에 Toast
메시지만 표시합니다.
이전 예제를 실행하고 테스트하는 데 사용한 것과 동일한 단계를 사용합니다. 이 예는 예상한 것과 동일한 결과를 표시합니다.
David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.
LinkedIn GitHub