2022. 4. 6. 10:00ㆍIT/안드로이드
UI에 있는 값을 불러오기 위해서는 view 객체에 할당된 각각의 id를 호출해 값을 갖고와야하는데,
거기서 사용되는것이 findViewById() 이다. 근데 이걸 매번 앞에 붙여서 id 값을 호출하기에는 넘 번거롭다.
그래서 대체하는것이 View Binding이다.
- 앱의 build.gradle 파일을 연다. (Gradle Scripts > build.gradle (Module: *****.app)).
- android 섹션에서 다음 줄을 추가.
buildFeatures {
viewBinding = true
}
3. 'Gradle files have changed since last project sync.'라는 메시지에 주의하고, Sync Now를 눌러 반영한다.
그리고 MainActivity.kt로 이동한다.
package com.example.tiptime
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.tiptime.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
// lateinit - 변수를 사용하기전에 먼저 초기화 할 것임을 확인하는 것.
lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// binding 객체를 초기화 하는것.
binding = ActivityMainBinding.inflate(layoutInflater)
//setContentView(R.layout.activity_main)
// 활동할 Contents View를 설정한다. 위의 레이아웃 리소스 ID인 R.layout.activity_main을 전달하는 대신,
// App의 View 계층 구조 root인 binding.root 를 지정한다.
setContentView(binding.root)
}
}
AppCompatActivity 함수를 위와 같이 수정한다.
상위 뷰와 하위 뷰의 개념을 상기하시기 바란다. ! Root 는 모든 View에 연결되어 있다.
이제 App에서 View에 대한 참조가 필요한 경우, findViewById() 를 호출하는 대신 binding 에서 뷰 참조를 가져올 수 있다.
// Old way with findViewById()
val myButton: Button = findViewById(R.id.my_button)
myButton.text = "A button"
// Better way with view binding
val myButton: Button = binding.myButton
myButton.text = "A button"
// Best way with view binding and no extra variable
binding.myButton.text = "A button"
나왔던 문제점
1.
Data binding 을 추가하기 위해 dataBinding 을 enabled = true 로 수정하고, layout 을 추가하고..
강의가 마무리 되가는듯 싶었는데, 에러가 많이 나오는거다. 심지어 Build도 안됨. ㅡㅡ
검색을 했더니 Clean compile 을 해라.. Rebuild 를 하라길래 했는데 안되는것이다. ㅡㅡ
ActivityBindingImpl 가 생성되었는데, 뭐 없다고 에러 뜨고 난리난리 ㅠ_ㅜ
예상외의 에러가 또 나와서 하..뭐지 하고 그냥 소스를 다 이전으로 돌려버렸다. ㅋㅋㅋ(무식)
덕분에 실습을 다시 한번 해볼수 있었다 ^^... 좀 더 빠르게.... ㅋㅋㅋㅋㅋㅋㅋ
(다음부턴 진행하면서 간간히 빌드 돌리면서 해야지^^....) 바인딩 하기 이전의 상태로 돌리고, 안드로이드 스튜디오 껐다가 킨 뒤에 다시 하나하나 천천히 추가하면서 Compile 시도 끝에 아주 정상적으로 동작하는것 확인.
근데 .... 은근 불편하네 ... clean compile 이 제대로 안되는건가....?
2.
이 강의가 은근 불친절하다..... 중급이라 그런가 뭔가 설명이 디테일 하지 않다.
입력 받은 값을 refresh? 해주고 다시 값을 써주기위해 invalidateAll() 을 써주는듯 하다.
이미 어플이 run 하고 있는 상태에서, 값만 다시 refresh 해주는 역할인가보다.
'IT > 안드로이드' 카테고리의 다른 글
Kotlin Null 처리 (Not null, Nullable) (4) | 2022.04.07 |
---|---|
Android - Jetpack, MVVM, MVC (5) | 2022.04.06 |
Udemy - Developing Android Apps with Kotlin (2: Layout) (10) | 2022.04.04 |
Android - Toast 메세지 창이 출력이 안될때 (5) | 2022.04.01 |
22-04-01 안드로이드 개발 일지 (3) | 2022.04.01 |