계기

: 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

+ Recent posts