Android Jetpack/AAC

뷰 바인딩 ViewBinding 사용법

wdadaww 2022. 12. 13. 17:39
  • 뷰 바인딩이란?
  • 레이아웃 xml 파일에 선언한 뷰 객체를  바인딩을 이용해 코드에서  쉽게 이용하는방법입니다.
  • 예전에는 findViewByid() 함수로 얻어 뷰를 이용햇습니다.

그런데  한 화면을 구성하는데  많은 뷰가 필요하고, 또 뷰 는 대부분 코드에서 이용하기때문에

뷰 객체를 선언하고 모두 findViewByid함수를 통해 하나하나 가져와야대는 귀찮음잇어 뷰바인딩을 사용합니다.

 

 

  • 빌드 그래들 모듈 설정

 

이렇게 하면 레이아웃 xml파일에 등록 된 뷰객체를 포함하는 클래스가 자동으로 만들어집니다.

  •  액티비티 뷰바인딩  (MainActivity.kt)
class MainActivity : AppCompatActivity() {
   //뷰바인딩 객체 타입에 ?을 붙여서 null을 허용해줘야한다.(onDestroy 될때 완벽하게 제거하기위해)
    private var mBinding: ActivityMainBinding? = null
    // 매번 null 체크를 할 필요없이 편의성을 위해 바인딩 변수 재선언!
    private val binding get() = mBinding!!

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
       
        mBinding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
    }
class MainActivity : AppCompatActivity() {

// 늦은초기화할 바인딩 변수선언
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //초기화시점
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

 

 

  • 프래그먼트 뷰바인딩 (Fragment.kt)
class MypageFragment : Fragment(R.layout.fragment_mypage) {
    private var mBinding: FragmentMypageBinding? = null
    private val binding get() = mBinding!!
    

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        mBinding = FragmentMypageBinding.bind(view)
        ../
    class HomeFragment : Fragment(R.layout.fragment_home) {
    private lateinit var binding: FragmentHomeBinding
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        binding = FragmentHomeBinding.bind(view)
        }
      }