[Android/Kotlin] 뷰 바인딩 (View Binding)

SoyoungLee·2021년 7월 7일
0

안드로이드/코틀린

목록 보기
10/68
post-thumbnail
post-custom-banner

💌 안드로이드 코틀린 뷰바인딩 (View Binding)

📌 모듈 수준의 gradle에 추가

android {

...

buildFeatures { // 뷰 바인딩 활성화
        viewBinding true 
    }
    
...

}

💜 레이아웃 파일(.xml) 들의 바인딩 클래스 생성

  1. 첫글자 대문자 (단어단위로 대문자)
  2. 끝에 바인딩

💚 Activity

ex) activity_main.xml -> ActivityMainBinding

💚 Fragment

ex) fragment_ecobox.xml -> FragmentEcoboxBinding

📌 1) binding 설정

  • 전역변수로 바인딩 객체 선언
  • 바인딩 객체 타입에 null을 허용 (Destroy 될 때 완벽하게 제거위해)

💚 Activity

private var _binding: ActivityMainBinding? = null
// 매번 null 체크를 할 필요 없이 편의성을 위해 바인딩 변수 재 선언
private val binding get() = _binding!!

💚 Fragment

private var _binding: FragmentEcoboxBinding? = null
// 매번 null 체크를 할 필요 없이 편의성을 위해 바인딩 변수 재 선언
private val binding get() = _binding!!

📌 2) binding 작업

💚 Activity

override fun onCreate(savedInstanceState: Bundle?) {
	super.onCreate(savedInstanceState) 
    
	// 기존 setContentView 제거
	// setContentView(R.layout.activity_main)
    	setContentView(binding.root) // * setContentView에는 binding.root를 꼭 전달

	// inflate라는 메서드를 활용해 액티비티에서 사용할 바인딩 클래스의 인스턴스 생성
	_binding = ActivityMainBinding.inflate(layoutInflater)

}

// 액티비티 파괴될 때
override fun onDestroy() {

	// onDestroy 에서 binding class 인스턴스 참조를 정리
	_binding = null
	super.onDestroy() 
    
}

💚 Fragment

override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
   

	// fragment_ecobox 레이아웃 연결
	_binding = FragmentEcoboxBinding.inflate(inflater, container, false)
        
        return binding.root
}

// 프래그먼트 파괴될 때
override fun onDestroyView() {

	// onDestroyView 에서 binding class 인스턴스 참조를 정리
        _binding = null
        super.onDestroyView()
        
}
profile
Android Developer..+ iOS 슬쩍 🌱 ✏️끄적끄적,,개인 기록용 👩🏻‍💻
post-custom-banner

0개의 댓글