본문 바로가기
개발(Development)/Android(안드로이드)

[안드로이드 Kotlin] Fragment 에서 뷰바인딩(View Binding) 사용 방법

by 카레유 2021. 7. 20.

이 글은 Kotlin 언어로 안드로이드 앱 개발 시,

Fragment에서 뷰바인딩(View Binding)을 설정하고 사용하는 방법에 대해 정리한다.

 

뷰바인딩을 설정하는 방법과 Activity에서 사용하는 방법은 아래 글을 참고하자.

[안드로이드 Kotlin] 뷰바인딩(View Binding) 설정 및 사용 방법


build.gradle 파일에 뷰바인딩 설정을 했다고 가정하고,(위 글 참고)

 

Fragment 에서 뷰바인딩을 구현한 코드 전문이다.

 

class FragmentTest : Fragment() {

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

        // 1. 뷰 바인딩 설정
        val binding = FragmentMenuBinding.inflate(inflater, container, false)
        
        // 2. 바인딩으로 TextView 등에 접근
        bindig.myTextView.text = "바인딩이 잘 되었어요!!"

        // 3. 프래그먼트 레이아웃 뷰 반환
        return binding.root
    }
}

 

1. 뷰 바인딩 설정

onCreateView() 생명주기 콜백 메서드에서 바인딩 변수를 생성한다.

framgent_menu.xml 파일을 바인딩하려면, FragmentMenuBinding 클래스의 inflate()메서드를 호출해주면 된다.

(xml파일명의 첫글자와 언더바_ 다음 글자를 대문자로 바꾸고 Binding을 붙여주면 된다.)

 

 val binding = FragmentMenuBinding.inflate(inflater, container, false) 

 

 

2. 바인딩 사용

binding변수.뷰ID 형태로 사용하면 된다.

예를들어 id가 myTextView인 텍스트뷰는 아래처럼 참조한다.

 

 bindig.myTextView.text = "바인딩 성공" 

 

 

3. 레이아웃 뷰 반환

액티비티는 Fragment의 onCreateVew() 메서드에서 반환하는 뷰를 화면에 띄운다.

 

원래 있던 자동생성코드는 아래와 같지만,

 return inflater.inflate(R.layout.fragment_life, container, false) 

 

이제 바인딩을 사용하므로 binding.root로 레이아웃 뷰를 반환해주면 된다.

 

 return binding.root 


여기서는 정리를 위해 onCreateView() 내부에서 binding 변수를 선언하여 지역변수처럼 사용했지만,

어디서든 binding을 사용하기 위해선 전역변수? 프로퍼티?  로 선언해서 사용해도 괜찮을 것 같다.

( lateinit 등 활용 )

 

class FragmentMenu : Fragment(), Animation.AnimationListener {

    // lateinit 으로 선언해두고, onAttach()에서 초기화해도 된다.
    lateinit var binding: FragmentMenuBinding
    
    
    // 물론 nullable? 로 선언해둬도 된다.
    // var binding: FragmentMenuBinding? = null

}

실행해보면 뷰바인딩이 성공적으로 세팅되었음을 알 수 있다.

 

 

댓글