1. View binding 사용
- 상호 작용하는 코드를 더 쉽게 작성할 수 있는 기능 = findViewById 대체
- 모듈에서 View binding이 활성화되면 ID가 있는 모든 뷰에 대한 참조가 가능
2. findViewById와의 차이점
- Null 안전성 : 뷰에 대한 직접 참조를 생성하기 때문에, 잘못된 ID로 인해 null 오류 발생할 위험이 없음
- Type 안전성 : 잘못된 타입으로 캐스팅하여 발생하는 cast exception 발생 없음
3. View binding 설정
- build.gradle에서 View binding을 설정해야 사용 가능
- Gradle Scripts > build.gradle > 아래 구문 입력 > Sync Now
android{
...
buildFeatures{
viewBinding true
}
}
- 바인딩 클래스는 레이아웃 별로 무조건 생성되는데, 만약 협업 시 각자 다른 방식으로 뷰를 사용하여 해당 레이아웃의 바인딩 클래스가 필요없을 때 아래와 같은 속성을 추가
<LinearLayout
...
tool: viewBindingIgnore = "true">
...
</LinearLayout>
4. View binding 사용법
class MainActivity : AppCompatActivity() {
private lateinit var binding : ActivityMainBinding
//onCreate를 통해서 반드시 초기화되기 때문에 lateinit 사용
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
//레이아웃 xml 코드들을 객체화해 소스코드에서 사용
setContentView(binding.root)
//setContentView() 험수 실행 후 생성한 binding의 xml에 있는 UI요소가 담긴 root 뷰를 사용
}
}
- ActivityMainBinding : 바인딩 클래스 이름
Activity 이름 | Bindinf Class 이름 |
MainActivity | ActivityMainBinding |
TestActivity | ActivityTestBinding |
- inflate() : xml에 표기된 레이아웃들을 메모리에 객체화 시키는 과정
- setContentView() : xml을 객체화시키는 inflate 동작
class MainActivity : AppCompatActivity() {
val binding by lazy {ActivityMainBinding.inflate(layoutInflater)}
//lateinit와 by lazy의 차이
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
5. View binding 활용 예제
활용 1. View binding을 사용하여 "버튼"을 클릭하였을 때, SecondActivity로 화면 전환
activity_main.xml | |
1. TextView | 2. Button |
@+id/tv_main
|
@+id/btn_button
|
MainActivity.kt
class MainActivity : AppCompatActivity() {
private lateinit var binding : ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.btnButton.setOnClickListener {
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
}
}
}
Android studio_ 1. Activity와 Intend(화면 이동)
1. Activity 앱이 실행되면 전체 화면에 앱의 UI가 표시되고, 사용자가 입력한 화면터치 또는 버튼 터치 등의 이벤트에 따라 앱의 기능이 수행 안드로이드 애플리케이션의 핵심 구성 요소로서 사용
hyelan-note.tistory.com
활용 1-1. View binding을 사용하여 "버튼"을 클릭하였을 때, SecondActivity로 화면 전환 후 텍스트 값(String, Int 타입)을 전환 된 화면에 송출
activity_second.xml | |
1. TextView | 2. TextView |
@+id/msg1
|
@+id/msg2
|
MainActivity.kt
class MainActivity : AppCompatActivity() {
private lateinit var binding : ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.btnButton.setOnClickListener {
val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("msg1_String","hellow!")
//putExtra를 사용할 때 value의 값에 따라 타입이 결정이 되어 타입을 따로 지정하지 않아도 됨
intent.putExtra("msg2_Int",2024)
startActivity(intent)
}
}
}
SecondActivity.kt
class SecondActivity : AppCompatActivity() {
private lateinit var binding: ActivitySecondBinding
//SecondActivity로 뷰바인딩 설정
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivitySecondBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.msg1.text = intent.getStringExtra("msg1_String")
//Extra값을 꺼낼때에는 타입을 지정해야 함
binding.msg2.text = "${intent.getIntExtra("msg2_Int", 0)}"
//숫자형 타입의 값을 꺼낼때에는 두번째 값인 defauitValue 입력
//텍스트에는 숫자 타입을 바로 넣을 수 없기 때문에 "${}" 문자열 템플릿 사용
}
}
- with 사용
with(binding){
msg1.text = intent.getStringExtra("msg1_String")
msg2.text = "${intent.getIntExtra("msg2_Int", 0)}"
}
더보기
동작 화면
![]() |
![]() |
첫 번째 화면 | 두 번째 화면 |
'Android' 카테고리의 다른 글
Android Studio_ 8. Spinner (0) | 2024.03.29 |
---|---|
Android Studio_ 7-1. View binding (0) | 2024.03.28 |
Android studio_ Values Resource File 사용 (0) | 2024.03.26 |
Android studio_ 6. RecyclerView (0) | 2024.02.26 |
Android studio_ 5. Shared Preferences (0) | 2024.02.21 |