반응형
무하지
무하지
무하지
전체 방문자
오늘
어제
  • 분류 전체보기
    • 알고리즘
      • 알고리즘+자료구조
      • 문제풀이
    • Python
      • 머신러닝
    • 운영체제
    • Javascript
    • React
    • C#
    • C++
    • Java
    • Kotlin
    • 수학
      • 통계학
    • 기타
    • Computer Science

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
무하지

무하지

Kotlin

[Kotlin] findViewById & kotlin-android-extensions & viewBinding

2021. 9. 13. 18:36
반응형

findViewById & kotlin-android-extensions


자바에서는 뷰를 불러올 때 아래와 같이 findViewById()를 써야했다.

val myView = findViewById(R.id.myView)
myView.setImageResource(R.mipmap.ic_launcher)

 

하지만 코틀린은 아래와 같이 간결하게 쓸 수 있었다.

myView.setImageResource(R.mipmap.ic_launcher)

 

왜 과거형이냐면, 안드로이드 스튜디오 4.1 버전과 그 이후로는 kotlin-android-extensions 플러그인을 기본적으로 제공하지 않기 때문이다. 만약 굳이 사용하고 싶다면 build.gradle 파일에 아래와 같이 직접 추가해주면 된다.

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-android-extensions'
}

 

문제점


kotlin-android-extensions는 엄청나게 편리한 기능이지만, 지원이 중단되었다. 익스텐션을 사용하면 크게 두가지의 문제점이 발생할 수 있기 때문이다.

  1. 동일한 id를 가진 widget의 모호함
  2. ViewHolder의 캐싱문제

 

viewBinding


참조: https://developer.android.com/topic/libraries/view-binding#kotlin

viewBinding을 사용하기 위해 우선 build.gradle 파일의 android 내에 아래와 같은 코드를 추가해준다.

buildFeatures{
    viewBinding true
}

 

그 후 inflate() 메서드를 호출해서 binding 클래스 인스턴스를 생성한다. 이때 바인딩 클래스의 이름은 XML 파일 이름을 카멜 표기법으로 변환한 뒤, Binding을 추가한 형태가 된다.

val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)

 

이제 binding 클래스 인스턴스를 사용해 뷰를 참조할 수 있다.

binding.name.text = viewModel.name
binding.button.setOnClickListener { viewModel.userClicked() }
반응형

'Kotlin' 카테고리의 다른 글

[안드로이드 스튜디오] tablayout의 tabitem 사용시 java.lang.NullPointerException: Missing required view with ID  (0) 2021.09.14
[안드로이드 스튜디오] Missing contentDescription attribute on image  (0) 2021.09.13
[Android Studio] Hardcoded string "muyaho", should use '@string' resource  (0) 2021.09.13
[Kotlin] ConstraintLayout 동적으로 제어하기  (0) 2021.09.13
    'Kotlin' 카테고리의 다른 글
    • [안드로이드 스튜디오] tablayout의 tabitem 사용시 java.lang.NullPointerException: Missing required view with ID
    • [안드로이드 스튜디오] Missing contentDescription attribute on image
    • [Android Studio] Hardcoded string "muyaho", should use '@string' resource
    • [Kotlin] ConstraintLayout 동적으로 제어하기
    무하지
    무하지

    티스토리툴바