계기
: 2022년 3월부터 android studio로 kotlin을 youtube 강의를 들어가며 공부하던 중, 강의가 대부분 2~3년 전 업로드된 것들로
당시와 현 버전과의 차이점이 문제가 됨. (3.6 version 이상에서 view binding 사용으로 대체)
- 예전버전 : Activity에서 View 값을 참조하려면 findViewById 사용하여 view와 변수를 연결 (deprecated)
- 현재버전 : 자동으로 binding class를 생성을 통해서 view 참조 가능해짐.
사용법은 어렵지 않고, 이전의 findViewById를 사용하는것 보다 코드가 깔끔해짐.
예제 소스코드
1. build.gradle(app) 추가
android {
// 뷰 바인딩 옵션 활성화
viewBinding {
enabled = true
}
}
2. Activity 에서의 사용법
// 전역 변수로 바인딩 객체 선언
private var mBinding:ActivityMainBinding? = null
// 매번 null 체크를 할 필요 없이 편의성을 위해 바인딩 변수 재선언
private val binding get() = mBinding!!
fun onCreate(savedInstanceState:Bundle?) {
super.onCreate(savedInstanceState)
// 기존 setContentView 를 제거..
// setContentView(R.layout.activity_main)
// 액티비티에서 사용할 바인딩 클래스의 인스턴스 생성
mBinding = ActivityMainBinding.inflate(layoutInflater)
// getRoot 메서드로 레이아웃 내부의 최상위 뷰의 인스턴스를 활용하여 생성된뷰를 액티비티에 표시
setContentView(binding.root)
// binding 변수를 활용하여 xml 내의 뷰 id 접근 가능.
// 네이밍규칙에 따라.. ex) id 자동변환 : tv_message -> tvMessage
binding.[View_id].setText("...")
}
fun onDestroy(){
mBinding = null
super.onDestroy()
}
3. Fragment 에서의 사용법
- Fragment는 View 보다 오래 지속되는 생명주기를 가진다 하여, 반드시 onDestroyView() 에서 인스턴스 참조를 정리해야 한다.
private var mBinding:ActivityMainBinding? = null
private val binding get() = mBinding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
mBinding = ResultProfileBinding.inflate(inflater, container, false)
val view = binding.root
return view
}
override fun onDestroyView() {
super.onDestroyView()
mBinding = null
}
뷰바인딩 참고링크1 : https://todaycode.tistory.com/29
뷰바인딩 참고링크2 : https://developer.android.com/topic/libraries/view-binding
'Android > Kotlin' 카테고리의 다른 글
[Android, Kotlin] Navigation View (0) | 2022.04.20 |
---|---|
[Android, Kotlin] ListView (0) | 2022.04.19 |
[Android, Kotlin] drawable, drawable-v24 (0) | 2022.04.19 |
[Android, Kotlin] ImageView & Toast Message (0) | 2022.04.19 |
[Android, Kotlin] Intent 로 Activity 화면전환 (0) | 2022.04.19 |