닉네임도항상고민
블로그이름이항상고민
닉네임도항상고민
전체 방문자
오늘
어제
  • 분류 전체보기 (126)
    • Profile (1)
    • Android (32)
      • Kotlin in android (8)
      • Java in android (0)
      • Dev env setting (9)
      • Meltdown(pokedex) (3)
      • Error (5)
      • Gradle (3)
      • Etc (4)
    • Google sample app (7)
      • nowinandroid (4)
      • sunflower (3)
    • 프로젝트 뚝딱거리기 (3)
    • Personal project (11)
      • Just One Thing (5)
      • 50Buttons (6)
    • Coding Practice (0)
      • Baekjoon (0)
      • Programmers (0)
    • Git (1)
    • Language (0)
      • Java (0)
      • Kotlin (0)
    • 기타 프로그램관련 (14)
    • 프로그램설치 및 설정 (2)
    • 공부 자료 리뷰 (책 서평, 인강리뷰) (13)
    • 일상과 헛소리 (27)
    • 알쓸신잡 (3)
    • ---이하 out of control--- (0)
    • Spring (3)
    • IOS (1)
    • Mysql (1)

공지사항

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

최근 댓글

인기 글

최근 글

태그

  • Apache License 2.0
  • Atomic Kotlin
  • 후기
  • 잠을 잘자고
  • m1pro
  • 글을 많이 써보자
  • 구글
  • android codelab
  • 맥북프로 16
  • 박사 학위 논문이라고 쓰고 싶다 ㅅㅂ
  • 맥북 롤 설정
  • effective kotlin
  • 서평
  • profeel이라고 쓰기도 한다
  • 아토믹코틀린
  • 2021 macbook pro
  • 누가 코틀린 2주면 익힌다고 했는가.. 누구인가..?
  • 맥북프로 후기
  • 대충 헛소리임
  • 진지하게 받지마셈
  • 프로필이라 읽고
  • Android
  • 안스
  • mac jdk삭제
  • pro-feel!
  • 이펙티브코틀린
  • 랜콘센트
  • 커밋 수 1년에 200이하 맥북프로 금지
  • m1 롤 설정
  • 벽면 랜포트 고장

티스토리

hELLO · Designed By 정상우.
닉네임도항상고민

블로그이름이항상고민

Android/Kotlin in android

뷰 바인딩 (View Binding)

2022. 10. 27. 11:26

findViewById 를 안 쓰고,

xml에 써둔 id에 대해서 binding class가 따로 만들어지는 방법이라고 한다.


예제로, 

new Project - Basic Activity를 만들어보면,

이미 view binding이 세팅되어 있다.

 

 

build.gradle (app level)에 아래 옵션이 들어가 있으면 된다.

android {
	...
    
	buildFeatures {
    	viewBinding true
	}
    ...
}

 


 

// MainActivity.kt를 보면

private lateinit var binding: ActivityMainBinding

이 변수가 선언되어 있는데,

ActivityMainBinding이 자동으로 만들어지는 듯하다.

 

이 클래스의 이름은 xml의 이름을 activity_main.xml을 파스칼표기법에 + Binding을 붙이는 것 같다.

 

 

// MainActivity.kt - onCreate()에서 

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    binding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(binding.root)
    
    binding.id.function~
}

위에 초기화 안했던 lateinit인 binding변수가 onCreate 에서 inflate함수사용으로 초기화 되고,

setContentView에 binding.root를 넣어준다.

 

 

그리고 나면 

binding.[내가 지정한 id값]으로 xml에 지정했던 값을 사용하면 된다.


// Fragement에서는 좀 다르게 사용하던데

 

// FirstFragment.kt에서

private var _binding: FragmentFirstBinding? = null

// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!

실질적으로 들어가는건 _binding이고

사용하는 부분은 _binding을 참조하는 binding변수가 된다.

 

 

Fragment생명주기에서 

onCreateView에서 _binding을 초기화 하고,

셋팅된  binding.root를 넘겨준다.

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {

    _binding = FragmentFirstBinding.inflate(inflater, container, false)
    return binding.root
}

 

그리고 

onViewCreated()에서 

필요한 id값을 Activity에서와 동일하게 사용하면 된다.

 

binding.id~

 

 

 

 

onDestoryView()에서 

override fun onDestroyView() {
    super.onDestroyView()
    _binding = null
}

_binding을 초기화 해주면서,

binding변수도 같이 메모리 해제 될 것으로 보인다.

 

 


findViewById 를 줄곧 잘 써와서 딱히 불편한 게 없었는데,

뷰바인딩이 쉬우니 써봐야겠다.

 

 

구글문서를 보면 findViewByID와의 차이점 비교가 있는데,

뷰 바인딩을 쓰면 컴파일 타임에 null이나 타입 안정성을 확보할 수 있다고 한다.

그리고 데이터 바인딩과 차이점 및 유의사항도 있으니 읽어보시길.

 

그리고 영문 문서에 Provide hints for different configurations섹션이 추가되어있으니 한글문서 볼 때 주의바람.

 

 

https://developer.android.com/topic/libraries/view-binding

 

뷰 결합  |  Android 개발자  |  Android Developers

뷰 결합 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 뷰 결합 기능을 사용하면 뷰와 상호작용하는 코드를 쉽게 작성할 수 있습니다. 모듈에서 사용 설정

developer.android.com

 

 

저작자표시 비영리

'Android > Kotlin in android' 카테고리의 다른 글

안드로이드 버튼 android:src와 app:srcCompat 두 속성의 차이점 (with. chatgpt)  (0) 2024.02.23
android android:gravity와 android:layout_gravity의 차이  (0) 2023.08.25
RecyclerView를 연습해보았다 (공부한 자료 & 회고)  (0) 2023.04.28
코루틴coroutine &플로우flow 학습 했던거 회고  (0) 2023.04.25
힐트 hilt 공부 방법, 용어 메모, ide에서 아이콘설명 (개인공부)  (0) 2022.10.15
    'Android/Kotlin in android' 카테고리의 다른 글
    • android android:gravity와 android:layout_gravity의 차이
    • RecyclerView를 연습해보았다 (공부한 자료 & 회고)
    • 코루틴coroutine &플로우flow 학습 했던거 회고
    • 힐트 hilt 공부 방법, 용어 메모, ide에서 아이콘설명 (개인공부)
    닉네임도항상고민
    닉네임도항상고민
    개발 블로그라기 보단, 개발' 일기' 블로그가 되어가고 있다. 단순히 검색해서 나오는 코드보다는 공부하면서 생기는 노하우를 전달하고 싶다. (도움 되는 글을 보셨다면 '하트'를 눌러주셔요♥ , 도움 안되는 잡글이 있다면, 댓글로 적어주시면 비공개 처리 합니다. )

    티스토리툴바