[Android/Kotlin] 뷰 바인딩

핸디·2021년 6월 29일
0

안드로이드

목록 보기
2/9

뷰바인딩이란?

findViewById를 사용하지 않고, XML의 view component에 접근하는 object를 반환받아 view에 접근하는 방식

"뷰 바인딩"은 뷰를 다루는 코드를 보다 쉽게 작성할 수 있게 해준다. 레이아웃 XML 파일에 정의되어 있는 뷰를 자동으로 생성된 클래스를 통해 자바/코틀린 코드에서 참조할 수 있게 해준다.

장점

1) findViewById를 하나하나 선언할 필요X
2) Type-safe (레이아웃 내에서 정확한 view 타입을 찾아 맵핑함)
3) Null-safe (레이아웃에 없는 id를 findViewById를 했을 때의 NullPointerException 방지)

사용법

① Build.gradle(app)에 코드 추가

android{

	buildFeatures{
        	viewBinding true
    }
  }

프로젝트 상 레이아웃 파일들 (xml 파일)이 바인딩 클래스라는 녀석이 생기게되고, 각 파일들에 선언해두었던 뷰 들의 id 들의 참조가 포함된다.
-> 자동으로 생성된 바인딩 클래스 이름은 레이아웃xml파일 이름에서 변경됨
예시) activity_main.xml -> ActivityMainBinding

② Activity.kt에 전역으로 binding 변수 추가

class MainActivity : AppCompatActivity() {

    private lateinit var binding:ActivityMainBinding //전역으로 바인딩 객체 선언
    private lateinit var adapter:RecyclerViewAdapter

③ onCreate 메서드 안에 binding처리

 override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //setContentView(R.layout.activity_main)  -->기존의 setContentView는 제거
        binding=ActivityMainBinding.inflate(layoutInflater)
        //자동생성된 뷰바인딩 클래스에서의 inflate라는 메서드를 활용해서 액티비티에서 사용할 바인딩클래스의 인스턴스 생성

        setContentView(binding.root)
//getRoot메서드로 레이아웃 내부의 최상위 위치뷰의 인스턴스를 활용하여 뷰를 액티비티에 표시

//이제 binding변수를 이용하여xml내의 뷰 id를 마음껏 접근할수 있다!
//뷰id도 네이밍규칙 적용돼서 tv_message->tvMessage

//예시 activity_main.xml에 tv_message라는 TextView 있는경우
binding.tvMessage.setText("앙녕하세요")

④ 사용예시

 fun initDogRecyclerView(){
        
        binding.recyclerView.adapter=adapter
        //activity.main에는 recyclerView라는 아이디를 가진 요소가 있음
        
        binding.recyclerView.layoutManager=LinearLayoutManager(this) 
    }

참고

https://choheeis.github.io/newblog//articles/2020-09/viewBinding
-> 뷰바인딩에 대한 설명
https://duckssi.tistory.com/42
-> 홍드로이드 View Binding
https://flow9.net/bbs/board.php?bo_table=android&wr_id=27
-> Activity/Fragment/Adapter에서 뷰바인딩 사용하기

0개의 댓글