코틀린의 레이아웃 요소에 접근하기 위해서는 findViewById 함수를 통해 접근하거나 익스텐션으로 접근할 수 있다.
하지만 코틀린 익스텐션은 최신 버전의 안드로이드 스튜디오에서는 사용을 권장하지 않는데 그 이유는 아래와 같다.
- 코틀린에서만 제공하므로 자바에서 사용하지 못한다.
- 일부 상황에서 뷰를 찾을 수 없는 오류가 발생할 수 있다.
- 어디서나 뷰를 호출할 수 있기 때문에 참조로 인해 앱이 강제로 종료될 수 있다.
- 모듈화를 추천하고 있는데 코틀린 익스텐션을 사용할 경우 다른 모듈에서 뷰에 대한 접근이 불가능하다.
findViewById는 뷰의 요소에 접근 하기 위해서는 아래와 같이 각각의 요소에 대한 객체를 만들어 주어야 했다.
public class MainActivity extends AppCompatActivity {
private TextView nameView, phoneView, addressView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
nameView = findViewById(R.id.name);
phoneView = findViewById(R.id.phone);
addressView = findViewById(R.id.address);
}
}
이러한 단점을 보완해주는 기능이 뷰 바인딩이다.
뷰 바인딩 하는 방법은 아래와 같다.
- build.gradle 파일에 viewBinding 설정을 추가
viewBinding true
2. Android Studio 상단에 있는 [Sync Now] 클릭
3. activity_main.xml 레이아웃 파일을 작성한다.
4. viewBinding이 설정되어 있기 때문에 안드로이드가 레이아웃 파일을 바인딩으로 생성한다.
- 자동변환 공식: 레이아웃 파일명 (첫 글자와 언더바 다음 영문을 대문자로 변환) + Binding ex) activity_main.xml = ActivityMainBinding
5-1. MainActivity.kt 파일에 있는 코틀린 코드에서 클래스로 변환된 바인딩의 inflate 함수로 초기화하고 변수에 저장한다.
val 변수 = ActivityMainBinding.inflate(layoutInflater)
5-2. 이어서 변수에 저장된 바인딩의 root 뷰를 setContentView에 전달한다.
setContentView(변수.root)
6. 바인딩을 도트 연산자(.)로 뷰의 id에 접근 후 사용한다.
변수.textView = "Hello"
1. viewBinding 설정 후 Sync Now 클릭
3 ~ 6
- binding 변수를 만들고 바인딩한다.
- binding 변수로 접근하고 싶은 layout 객체에 접근한다.
- setContentView를 binding.root로 설정해준다.
setContentView에 R.layout.activity_main을 사용해도 화면에는 동일하게 나타나지만,
뷰 바인딩을 사용하기 위해 setContentView를 바인딩한 변수.root로 설정해주어야 한다.
'Android' 카테고리의 다른 글
Android BottomNavigation Bar Round효과 (0) | 2022.08.02 |
---|---|
안드로이드 액티비티간 화면 전환 및 데이터 전달 (Intent) - Kotlin (0) | 2022.07.25 |
[Android ]Progress Bar - Kotlin (0) | 2022.07.25 |
[Kotlin] 코틀린에서의 변수 사용법 (2) | 2022.07.07 |
안드로이드 컴파일 (JVM, DVM) (0) | 2022.07.04 |