본문 바로가기

IT/Android

안드로이드 스튜디오 / Fragment에서 ViewBinding (뷰결합)

반응형

 build.gradle에 viewBinding 허용해준다.

android {
        ...
        viewBinding {
            enabled = true
        }
    }

 

onCreateView 메서드에서 

1. 정적 inflate()메서드 호출한다. 프래그먼트에서 사용할 결합 클래스 인스턴스가 생성된다.'

2. getRoot() 메서드를 호출하거나 Kotlin 속성 구문을 사용하여 루트 뷰 참조를 가져온다.

3. onCrateView(). 메서드에서  루트 뷰를 반환한다.

	private var lBinding: FragmentMainReservationBinding? = null
    private val binding get() = lBinding!!

    override fun onCreateView(inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?): View {
        lBinding = FragmentMainReservationBinding.inflate(inflater, container, false)
        return binding.root
        //return inflater.inflate(R.layout.fragment_main_reservation, container, false)

    }
    override fun onDestroy() {
        super.onDestroy()
        lBinding = null
    }

 

onViewCreated에서 Binding 사용할 수 있다.

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        binding.btnCheck.setOnClickListener{
        //버튼 클릭하면 할 동작
        }
    }

 

갑자기 Fragment 생명주기가 왜 나오나 싶겠지만...

onCreate에서 binding.btn은 대뜸 하려는 바보같은 시도는 다시 하지 않길 바라며..

activity에서 흔히 쓰는 onCreate에서 binding하면 당연히 될 줄 알았는데.. 

onCreateView에서(뷰가 생성될때) 바인딩 연결 해놓고, 해당 메서드 실행도 전에 onCreate에서(프래그먼트 생성될떄, 뷰 생성 전) 바인딩 쓰려고 하니 당연히 안된다.

 

https://developer.android.com/topic/libraries/view-binding?hl=ko