2022. 12. 6. 17:55ใ_Study/AndroidStudio
๋ทฐ ์ด๋ฒคํธ ๐¸.•*¨*•¸.•*¨*•¸.•*¨*•¸.•*¨*•
ํด๋น ์๋ฃ๋ ๊ฐ์ ํ์ต์๋ฃ์ด๋ฉฐ, Do it! ๊นก์์ ์๋๋ก์ด๋ ์ฑ ํ๋ก๊ทธ๋๋ฐ with ์ฝํ๋ฆฐ์ ์ฐธ๊ณ ํ์์ต๋๋ค.
์ด๋ฒคํธ๋ ์กํฐ๋นํฐ์ ํฐ์น ์ด๋ฒคํธ๋ฅผ ์ด์ฉํ์ง ์๊ณ ๊ฐ ๋ทฐ์์ ์ ๊ณตํ๋ ๋ณ๋์ ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ๋ค.
์ด๋ฒคํธ ์ฒ๋ฆฌ๋ ์ด๋ฒคํธ ์์ค์ ๋ฆฌ์ค๋(์ด๋ฒคํธ ํธ๋ค๋ฌ)๋ก ์ญํ ์ด ์๋๋ฉฐ ์ด ๋์ ๋ฆฌ์ค๋ ๋ฑ๋ก ํจ์๋ก ์ฐ๊ฒฐํด์ผ ์ฒ๋ฆฌํ ์ ์๋ค.
- ์ด๋ฒคํธ ์์ค : ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๊ฐ์ฒด
- ๋ฆฌ์ค๋(์ด๋ฒคํธ ํธ๋ค๋ฌ) : ์ด๋ฒคํธ ๋ฐ์์ ์คํํ ๋ก์ง์ด ๊ตฌํ๋ ๊ฐ์ฒด
- ๋ฆฌ์ค๋ ๋ฑ๋กํจ์ : ์ด๋ฒคํธ ์์ค์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ํจ์
์ด๋ฒคํธ์์ค -> (๋ฆฌ์ค๋ ๋ฑ๋กํจ์) -> ๋ฆฌ์ค๋(์ด๋ฒคํธ ํธ๋ค๋ฌ)
binding.button.setOnClickListener{
Log.d("kkang","ํด๋ฆญ์ด๋ฒคํธ")
}
์ด๋ฒคํธ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ 1
์ด๋ฒคํธ์์ค.๋ฆฌ์ค๋๋ฑ๋กํจ์(๋ฆฌ์ค๋: ๋ฑ๋กํจ์){} ๋ฅผ ์ฐ๊ฒฐํ๋๋ฐ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๊ธฐ๋ ํ๋ค.
์ธํฐํ์ด์ค๋ ๊ฐ์ฒด๋ฅผ ๋ชป๋ง๋ค๋ฉฐ ๋๋ฌธ์๋ก ์์ํ๊ณ ๋ด๋ถ์ ์ถ์๋ฉ์๋๊ฐ ์๋ค. ํ๋ฒ๋ง ์ฐ๊ณ ๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ์ ๋ฌ๋๋ฉฐ ์ต๋ช ์ผ๋ก ์ฌ์ฉํ๋ค. (Anonymous class)
๋ค์ ๋๋ฌธ์๋ก ์ธํฐํ์ด์ค? ์ฐ๊ฒฐํ๋ฉด ๋นจ๊ฐ ์ ๊ตฌ๊ฐ ๋ฌ๋ค.
์๋์ผ๋ก ๋ฉค๋ฒ๋ฅผ ๋ง๋ค์ด์ค๋ค. TODO ๋ง ์์ ํ๋ฉด๋๋ค.
binding.checkbox.setOnClickListener(object : CompoundButton.OnCheckedChangeListener {
override fun onCheckedChanged(p0: CompoundButton?, p1: Boolean) {
TODO("Not yet implemented")
}
})
์ด๋ฒคํธ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ 2
class MainActivity : AppCompatActivity() , CompoundButton.OnCheckedChangeListener {
lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root) // ๋ทฐ ๊ฐ์ฒด ์์ฑ
binding.checkbox.setOnClickListener(this)
}
override fun onCheckedChanged(p0: CompoundButton?, p1: Boolean) {
TODO("Not yet implemented")
}
์ด๋ฒคํธ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ 3
class MyEventHandler : CompoundButton.OnCheckedChangeListener{
override fun onCheckedChanged(p0: CompoundButton?, p1: Boolean) {
TODO("Not yet implemented")
}
}
class MainActivity : AppCompatActivity(){
lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root) // ๋ทฐ ๊ฐ์ฒด ์์ฑ
binding.checkbox.setOnCheckedChangeListener(MyEventHandler())
}
}
์ด๋ฒคํธ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ 4
binding.checkbox.setOnCheckedChangeListener{
compoundButton, b ->
Log.d("kkang","์ฒดํฌ๋ฐ์คํด๋ฆญ")
}
ํด๋ฆญ๊ณผ ๋กฑํด๋ฆญ ์ด๋ฒคํธ ์ฒ๋ฆฌ
ClickEvent, LongClickEvent ๋ ๋ทฐ์ ์ต์์ ํด๋์ค์ธ View ์ ์ ์๋ ์ด๋ฒคํธ์ด๋ค.
- open fun setOnClickListener(l: View.OnClickListener?): Unit
- open fun setOnLongClickListener(l: View.OnLongClickListener?): Unit
๋๋ฌธ์ ์ธํฐํ์ด์ค, ๋ด๋ถ์ ์ถ์๋ฉ์๋
binding.button.setOnClickListener{
Log.d("kkang","ํด๋ฆญ์ด๋ฒคํธ")
}
binding.button.setOnLongClickListener{
Log.d("kkang","ํด๋ฆญ์ด๋ฒคํธ")
true //๋๋ค ํจ์์ ๋ฐํํ์ด Boolean
}
SAM(Single Abstraction Method) ๊ธฐ๋ฒ
์๋ฐ API๋ฅผ ์ฝํ๋ฆฐ์์ ํ์ฉํ ๋ ๋๋ค ํํ์์ผ๋ก ์ฝ๊ฒ ์ด์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ๊ธฐ๋ฒ์ผ๋ก ํ๋์ ์ถ์ํจ์๋ฅผ ํฌํจํ๋ ์ธํฐํ์ด์ค๊ฐ ์๋ฐ์ ์์ฑ๋์ด ์๊ณ ๊ทธ ์ธํฐํ์ด์ค๋ฅผ ๋ฑ๋กํ๋ ์ธํฐsetter ํจ์๋ ์๋ฐ์ ์์ฑ๋์ด ์์ผ๋ฉด ์ฝํ๋ฆฐ์์ ์ธํฐ ํจ์๋ฅผ ์ด์ฉํด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ฐ์ฒด๋ฅผ ๋ฑ๋กํ ๋ ๋๋คํจ์๋ก ์ฝ๊ฒ ๋ฑ๋กํ ์ ์์ต๋๋ค.
์๋ฐ๋ฅผ ํ์ฉํ ๊ตฌํ์ ๋์ค์ ํด๋ณด๊ธฐ๋ก ํ๋ค.