일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- stl
- 스프링
- Kotlin
- 블로그개설
- 프로그래머스
- git
- Android
- 프로그래밍
- hackerrank
- DP
- retrofit
- 카카오인코더
- TensorFlow
- 스프링프레임워크
- 안드로이드
- ADAS
- vue.js
- 백트래킹
- python3
- c++
- c
- 스프링 프레임워크
- BFS
- spring
- 인코더
- Rebase
- 백준
- 연결리스트
- Map
- 머신러닝
Archives
- Today
- Total
이것저것 공부한 기록
[Android] 뷰 이벤트 처리 방법 네 가지( Listener 등록 ) 본문
(출처 : 깡샘의 안드로이드 앱 프로그래밍 with 코틀린)
사용자 이벤트 종류 : 터치 이벤트, 키 이벤트, 뷰 이벤트
액티비티의 화면을 구성하는 TextView, EditText, ImageView, Button등의 뷰는 사용자의 터치를 이벤트로 별도로 제공한다. 요게 뷰 이벤트.
터치 이벤트 : onTouchEvent()만 액티비티에 선언해놓으면 처리 가능
키 이벤트 : onKeyDown()만 액티비티에 선언해놓으면 처리 가능
뷰 이벤트 처리는 Event source와 Event handler로 역할이 나뉘고, 이것을 listener로 연결해야 이벤트를 처리할 수 있다
- Event Source : 이벤트가 발생한 객체
- Event Handler : 이벤트 발생 시 실행할 로직이 구현된 객체
- Listener : 이벤트 소스와 이벤트 핸들러를 연결해주는 함수
구현 방법 4가지..가 있는데 이걸 코드만 줄줄 읽다보니 뭔 소린지 모르겠어서 본 포스트를 작성하며 코드를 써보기로 함.
1. 인터페이스를 구현한 object 클래스를 이벤트 핸들러로 만든다
2. 액티비티 자체에서 인터페이스를 구현한다
3. 이벤트 핸들러를 별도의 클래스로 만들어 처리한다
4. 코틀린의 SAM(Single Abstract Method) 기법을 사용한다
체크박스를 클릭하면 로그를 띄우는 구현을 각 방법으로 코드로 구현하면 아래와 같음
1. 인터페이스를 구현한 Object 클래스를 이벤트 핸들러로
val binding = ActivityMainBinding.inflate(layoutInflater)
binding.checkbox.setOnCheckedChangedListener(Object: CompoundButton.OnCheckedChangeListener {
override fun onCheckedChanged(p0: CompoundButton?, p1:Boolean) {
Log.d("kkang", "체크박스 클릭")
}
})
2. 액티비티 자체에서 인터페이스를 구현
class MainActivity : AppCompatActivity(), CompoundButton.OnCheckedChangeListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.checkbox.SetOnCheckedChangeListener(this)
}
override fun onCheckedChanged(p0: CompoundButton?, p1: Boolean) {
Log.d("kkang", "체크박스 클릭")
}
}
3. 이벤트 핸들러를 별도의 클래스로 만들어 처리
class MyEventHandler : CompoundButton.OnCheckedChangeListener {
override fun onCheckedChanged(p0: CompoundButton?, p1: Boolean) {
Log.d("kkang", "체크박스 클릭")
}
}
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.checkbox.setOnCheckedChangeListener(MyEventHandler())
}
}
4. SAM 기법으로 구현 <- 제일 많이 쓰는 기법
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.checkbox.setOnCheckedChangeListener {
compoundButton, b->
Log.d("kkang", "체크박스 클릭")
}
}
}
'Study > Kotlin&Android' 카테고리의 다른 글
[Android] Foreground Service App 만들기 (0) | 2023.05.08 |
---|---|
[Android] 어플리케이션 간 파일 공유하기 (broadcast로) (0) | 2022.11.22 |
[Android] Retrofit 서비스 인터페이스 정의 (애너테이션) (0) | 2021.12.12 |
[Android] 서비스 (0) | 2021.11.21 |
[Kotlin] 함수형 프로그래밍, 순수 함수, 1급 시민 함수 (0) | 2021.08.05 |