티스토리 뷰

728x90

 

 

뷰 바인딩

xml에 있는 뷰들을 코드 상에서 바로 가져올 수 있는 기능이다.

코드가 지저분해질 수 있는 큰 원인인 findViewById()를 제거할 수 있다.

 

또한 findViewById()를 사용하면 관리해야 할 변수가 많아지고,

다른 액티비티의 xml을 가져오면 null값이 대입되어 NullPointerException이 발생할 위험이 있다.

 

뷰 바인딩을 사용하면 이러한 단점이 해결된다!

변수를 생성할 필요없이 xml의 id를 바로 사용할 수 있기 때문이다.

또한 다른 액티비티의 xml을 가져오면 컴파일 에러가 나기 때문에 비교적 안전하다.

 

 

그럼 뷰 바인딩을 적용하는 방법을 알아보자.

 

 

1. build.gradle (Module)

android {
        ...
        viewBinding {
            enabled = true
        }
    }

빌드 파일에 위 코드를 입력해서 뷰 바인딩을 활성화시킨 후 Sync를 완료하면,

각 xml 레이아웃 파일의 바인딩 클래스가 따로 생성된다.

이런 바인딩 클래스의 이름은 "xml 파일의 이름을 카멜 표기법으로 변환한 이름 + Binding"이다.

 

예를 들어 레이아웃 파일 이름이 activity_scan.xml인 경우, 바인딩 클래스 이름은 ActivityScanBinding이 된다.

 

 

2. 액티비티에서 뷰 바인딩 사용 

- 먼저 바인딩 클래스 타입을 가지는 binding 변수를 생성한다.

 

- onCreate()에서 바인딩 클래스의 inflate()를 호출한다.

inflate()는 바인딩 클래스 인스턴스를 반환하는데, 이 값을 binding 변수에 넣는다.

앞으로 이 binding 변수를 통해 xml의 뷰들을 편리하게 가져올 것이다.

 

- setContentView()에 루트 뷰(binding.root)를 전달한다.

기존에는 setContentView()에 xml 레이아웃의 파일명을 전달했지만, 이번엔 바인딩 클래스에서 얻는 루트 뷰로 액티비티를 활성화시킨다.

 

class MainActivity : AppCompatActivity() {
	private lateinit var binding: ActivityMainBinding
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
    }
}

 

 

3. 뷰 참조하기

이제 findViewById()가 아닌, binding 변수를 이용해 뷰를 참조한다.

만약 레이아웃 xml 파일에 button이라는 id를 가진 버튼이 하나 있다고 가정한다면, 아래와 같이 코드를 작성할 수 있다.

binding.button.setOnClickListener { finish() }

 

 

 

https://developer.android.com/topic/libraries/view-binding?hl=ko#kotlin 

728x90
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함