20230822 ViewBinding

기메단·2023년 8월 22일
1

TIL

목록 보기
24/44

공식 문서

이전까지는 findViewById로 타입 아이디 값을 가져와서 사용했는데 더 유용한 것을 오늘 배웠다. 

ViewBinding으로 모듈에 있는 각 XML 레이아웃 파일의 결합 클래스를 생성할 수 있다. 
뷰바인딩을 사용해야 하는 이유
1. 뷰와 상호작용하는 코드를 쉽게 작성할 수 있다. 
2. 속도도 findviewById보다 빠름 
2. NullSafe
3. Type safety  
등등
(자세한 건 공식 문서 참고) 

뷰 바인딩을 사용하려면 build.gradle 파일에 viewbinding 요소를 추가해줘야 한다. 

android{
	...
   // 안드로이드 스튜디오 버전마다 다름 
   
   // AndroidStudio 3.6 ~ 4.0
   viewBinding{
   	enabled = true
   }
   
   // AndroidStudio 4.0 ~
   buildFeatures{
   	viewBinding = true
   }
}
activity에서 사용하기 위해선 
1. 레이아웃 정보가 클래스로 만들어지기 때문에 해당 클래스를 통해서 
만들어진 객체를 담을 수 있는 변수를 생성한다. 
(최대한 빠른 시일 내에 초기화하겠다는 뜻의 lateinit var 사용해 변수 생성)
* 바인딩 클래스명은 액티비티 레아이웃 파일명으로 만들어진다. 
 activity_main.xml -> ActivityMainBinding

2. inflate() 메서드 호출. 
 inflate()란 xml 파일을 읽고 해석하겠단 의미. (객체화)
 
3. root로 레아이웃 표시.

4. 뷰 사용.

// activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:columnWidth="100dp"
    android:numColumns="auto_fit"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:stretchMode="columnWidth"
    android:gravity="center"
    android:id="@+id/grid"
    tools:context=".MainActivity">

</GridView>
// MainActivity

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

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

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

        binding.grid.adapter = ImageAdapter()
    }
}

3개의 댓글

comment-user-thumbnail
2023년 8월 23일

저는 바보같이 뷰바인딩도 안하고 하고 있었더라고요.. 비밀입니다.. 뷰를 쓰면서 헷갈리는 부분을 이렇게 정리해놓으니까 언제든 볼 수 있어 좋네요!

답글 달기
comment-user-thumbnail
2023년 8월 23일

크.. 역시 제 라이벌 답네요! 저도 자극받아서 무럭무럭 공부하겠습니다!

답글 달기
comment-user-thumbnail
2023년 8월 24일

글이 한 눈에 바로 읽히네요 ! 저는 이렇게 정리하는 게 아직 어렵던데 참고해갑니다 ~

답글 달기