본문 바로가기

안드로이드/안드로이드

[안드로이드] Viewbinding

우리는 안드로이드 개발을 하면서 Layout에 있는 Button, TextView 등 값을 변경, 클릭 등 이벤트에 대한 동작을 처리하기 위해 findViewById를 사용하여 뷰 객체를 가져와 사용하였다.

 

만약 Layout에서의 뷰 객체가 많아지고 모두 이벤트 동작을 처리해줘야 할 때, 이와 같은 방법은 비효율적일 것이다.

 

뷰 객체가 10개일 경우, findviewbyid로 뷰 객체 선언을 10번을 해주어야 하기 때문이다.

 

Viewbinding은 이러한 문제점을 해결한 findviewbyid를 대체하는 기능이다.

 

공식문서

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

 

사용법

1. setting

제일 처음으로 build.gradle(Module) 파일에 들어가서 다음과 같이 추가해준다.

 

build.gradle(Module)

android{
     ...
     buildFeatures{
          viewBinding true
     }
}

 

android {

     안에 아무대나 추가해주면 된다.

}

 

선택 사항

만일 viewbinding을 사용하지 않을 xml이 있다면 해당 xml에 다음과 같이 선언해준다.

<LinearLayout
        ...
        tools:viewBindingIgnore="true" >
        ...
    </LinearLayout>

 

2. Activity 사용

 

MainActivity.kt

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        
        binding.textid.text = "텍스트 내용"
        
    }
}

 

XML에서는 따로 설정해줄 건 없고, 뷰 객체의 id만 잘 설정해주면 된다.

 

그럼 binding 클래스 파일이 자동으로 생성이 되는데

이름은 xml 파일 이름이 activity_main.xml 이라면 ActivityMainBinding 으로 생성된다.

 

Activity 클래스에서는 초기에 위의 코드와 같이 binding 변수를 초기화해주고 setContentView에 binding.root를 세팅해주면 모든 것이 끝이 났다.

 

이제 사용하고자 하는 뷰 객체의 아이디를 이용하여 binding.뷰객체아이디 로 findviewbyid를 사용하지 않고도 이벤트를 처리해 줄 수 있다.

 

만일 TextView를 사용하고자 하며, 사용하고자 하는 TextView의 id가 textid라 했을 때 위의 코드와 같이

binding.textid.text = "내용"

 

사용해 줄 수 있다.