▶ 기존 방식 → findViewById
안드로이드 스튜디오를 이용한 안드로이드 네이티브 앱개발에서 findViewById 메서드는 리소스 id를 통해서 레이아웃에 있는 뷰 객체들 중 일치하는 뷰를 가져오는 메서드입니다. 그리고 setContentView와 같은 메서드로 xml에 있는 리소스들을 지정한 속성에 맞게 인스턴스를 생성하여 메모리에 로드하는 인플레이션 과정이 필요합니다. 이때 사용하는 메서드가 findViewById인데요, 문제는 가져와야 할 요소가 적을 때는 별문제가 없지만 아무리 간단한 앱이라고 하더라도 페이지 화면과 구성요소들이 증가하게 되면, 이 메서드로 일일이 뷰 객체를 하나씩 지정해서 가져오는 작업이 아주 번거로워집니다. 이에 따라, 성능상으로도 좋지 않기에 kotlin extension, Data Binding, View Binding과 같은 대체 방법들이 추가되었고, 이를 이용해서 앱을 개발하는 것이 좋습니다.
▶ viewBinding의 장점
1. findViewById 보다 속도가 상대적으로 빠르다.
2. Binding 지정만 해주면 정확한 view의 타입을 찾아 알아서 맵핑해준다.
3. NullPointerException을 방지 해준다.
▶ viewBinding 사용법
① build.gradle.kts (Module:app) 파일을 클릭하여 android { ... } 항목 속에 아래코드를 추가해 주세요.
viewBinding.isEnabled = true
android {
namespace = "com.example.resourcetest"
compileSdk = 34
viewBinding.isEnabled = true
defaultConfig {
applicationId = "com.example.resourcetest"
minSdk = 24
targetSdk = 34
versionCode = 1
versionName = "1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
코드 추가 후 상단에 보이는 Sync Now를 클릭하여 적용시켜 주세요.(아래)
그리고 바인딩을 참조하려는 layout의 이름 규칙에 따라 binding 객체를 생성해 주세요.
이름 생성 규칙 ↓ ↓
예시 1) activity_main.xml 을 참조한다면(바인딩) ActivityMainBinding 으로 이름 지어집니다.
(언더바는 생략하고 단어 첫 글자를 대문자로 한 다음 Binding글자와 함께 모두 이어 붙입니다.
예시 2) page_one.xml 을 참조한다면(바인딩) PageOneBinding 으로 이름 지어집니다.
따라서 예시 1과 같이 activity_main.xml을 바인딩한다면 MainActivity.kt 파일의 코드를 아래와 같이 구성해 주면 됩니다.
val binding = ActivityMainBinding.inflate(layoutInflater)
그리고 변경하고자 하는 xml 파일의 text 값이 있다면 아래처럼 구성합니다.
만약, activity_main.xml의 textView 객체의 id가 txtview 라면,
binding.txtview.setText("클릭했음")
그러면 textView의 내용이 "클릭했음"으로 변경 되게 됩니다.
아래는 변경한 코드 포함 전체 MainActivity.kt의 코드입니다. (버튼 1을 눌렀을 때 textView의 내용이 변하는 코드)
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.btn1.setOnClickListener {
binding.txtview.setText("클릭했음")
}
'App개발 > Android_Studio' 카테고리의 다른 글
【AndroidStudio】 gradle 관련 에러 해결하기! (2) | 2024.09.10 |
---|---|
【AndroidStudio】 기본 버튼 스타일을 다양하게 바꾸어 보자~! (1) | 2024.09.09 |
【Android Studio】 Intro 인트로 화면 만들기 (코틀린) (0) | 2024.09.07 |
[Android Studio] Fragment - 프래그먼트 사용법 (코틀린-kotlin) (0) | 2024.09.06 |
【트러블슈팅】 개발프로그램에서 스마트폰과 연결이 안될 때! (1) | 2024.08.12 |