[Android Kotlin] 뷰 결합(ViewBinding)

DoooongDong·2021년 12월 27일
0

Android Kotlin

목록 보기
1/11
post-thumbnail

ViewBinding이란 무엇인가?

뷰 결합(ViewBinding)기능은 findViewById참조하고 형변환을 해주던 불편함을 해결해주는 편리한 기능이다.

ViewBinding 사용법

  • 뷰 결합 선언
	android {
    	    ...
            viewBinding{
            	enabled = true
    	    }
        }

뷰 결합을 사용하기 위해서는 build.gradle 에 위 코드를 선언해준다.

  • 레이아웃 파일 작성
<LinearLayout>
  <TextView android:id="@+id/textView"/>
  <Button android:id="@+id/button"/>
</LinearLayout>

이 코드가 포함된 레이아웃 파일 이름이 activity_main.xml 일때 생성되는 결합 클래스의 이름은 ActivityMainBinding이 되고 이 클래스에서는 ID값이 각각 textViewTextView 필드와 buttonButton 필드가 존재한다.

  • Activity에서 뷰 결합 사용
private lateinit var binding: ActivityMainBinding

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
}
  1. 생성된 결합 클래스에 포함된 inflate() 메서드를 호출한다.

  2. binding.root로 루트뷰를 가져온 뒤 setContentView()에 전달한다.

inflate는 '부풀게 하다' 라는 의미를 가지고있는데 Android에서 inflate() 함수는 XML파일의 코드들을 객체화해서 코드에서 사용하게 해주는 역할을 한다.

위와 같이 선언이 끝나면 이제 결합 클래스의 인스턴스를 사용해서 뷰를 참조할 수 있게된다.

binding.textView.text = "textView 필드의 text값을 넣어준다."
binding.button.setOnClickListener{
	//button 클릭 이벤트를 처리해준다.
}
  • Fragment에서 뷰 결합 사용
private var _binding: ActivityMainBinding? = null
private val binding get() = _binding!! 
override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        _binding = ActivityMainBinding.inflate(inflater, container, false)
        val view = binding.root
        return view
    }
    //Fragment는 View보다 오래 지속되므로 onDestroyView()메서드로 결합 클래스 인스턴스 참조를 정리해 주어야함
    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
  1. 생성된 결합 클래스에 포함된 inflate() 메서드를 호출한다.
  2. binding.root로 루트 뷰를 호출한 뒤 onCreateView()메서드에서 루트뷰를 반환해준다.
binding.textView.text = "textView 필드의 text값을 넣어준다."
binding.button.setOnClickListener{
	//button 클릭 이벤트를 처리해준다.
}

findViewById보다 뷰 결합의 장점

  • NullSafe: 뷰의 직접 참조를 생성하므로 null 포인터 예외가 발생하지 않는다.

  • 유형 안전: 각 바인딩 클래스에 있는 필드들의 유형이 XML파일에서 참조하는 뷰와 일치하므로 클래스 변환 예외가 발생하지 않는다.



참고자료: https://developer.android.com/topic/libraries/view-binding?hl=ko#fragments

profile
꺾이지 말자 :)

0개의 댓글