본문 바로가기

개발환경/andriod studio

[Android][Kotlin] viewbinding (feat. findViewById)

코틀린 입문하여 튜토리얼중에 오류가 발생해 질문을 하였더니

오픈방에서 한 유저분이 이렇게 말씀해주셔서 찾아보게 되었다

감사합니다 개미님!

 


viewBinding  

 

  • viewBinding 이란 뷰와 상호작용하는 코드 
  • xml의 뷰와 class를 연결해준다
  • findViewById보다 더 쉽고 더 좋다
  • 구글에서 일부러 우리보고 사용하라고 더 좋은걸 만들어줬다
  • 코드가 간결해져 가독성 상승
  • NullPointerException 방지
  • class Cast Exception 방지

 

 

 

 

 

 

사용법

 

 

bulid.gradle(Module) 에다가 아래코드를 추가해준다

buildFeatures {
        viewBinding true
    }

 

 

 

gradle을 수정 했기에 위에 문구가 뜨고 Sync Now 를 클릭해준다!

 

 

 

 

MainActivity에서 다음 코드를 추가한다

 

class MainActivity : AppCompatActivity(){

    // 바인딩할 xml
    private lateinit var binding: ActivityMainBinding

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

        // 초기화  & xml 코드를 객체화
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

    }
}

 

 

xml에서 사용할 객체의 id값을

 

이렇게 사용하면 된다!

 

 

 

 

 

 

 

 

****** 바인딩 규칙 *******

 

 

xml의 이름이 Pascal 형식으로 바뀌고 뒤에 Binding이 붙는다

 

(e.g.)

activity_main.xml               ->               ActivityMainBinding

 

asd_asd_qwe.xml              ->               AsdAsdQweBinding

 

 

 

(e.g.)

아래 사진 처럼 만들게 되면

MinSang 이렇게 activity를 만들면!


xml 파일은 

activity_min_sang.xml이 되고 

이때 바인딩은 ActivityMinSangBinding이 된다

*****************

 

 

 

 

 

 

********

root 뷰는?

binding.root 에서 root는 뭘까?

 

최상위 뷰로서 모든 뷰를 포함하기 때문에 

하위 뷰에 접근가능!!!

 

 

 

 

 

 

 

 

 

자세한건 여기를 참고하자!

 

inflate란?

https://velog.io/@appletorch/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-Inflate%EC%9D%B4%EB%9E%80

 

안드로이드 Inflate이란?

Inflate란? 사전적 정의로 '부풀리다, 올리다'라는 의미를 가지고 있다. 그렇다면 무엇을 부풀린다는 걸까? 안드로이드에서 inflate는 xml에 표기된

velog.io

 

자세한 설명

https://todaycode.tistory.com/29

 

안드로이드 뷰 바인딩(view binding)

1. 뷰 바인딩 1-1. 라떼는 말이야... 1-2. 변천사 1-3. findViewById와의 차이점 2. 사용법 2-1. gradle 추가 2-2. 액티비티 2-3. 프래그먼트 2-4. viewBindingIgnore 1. 뷰 바인딩 1-1. 라떼는 말이야... 예를 들어, xml에

todaycode.tistory.com