Android

Anroid Jetpack [ ViewBinding ]

빨주노초잠만보 2024. 1. 2. 15:42

[ 안드로이드 공식 문서 ]

 

뷰 결합  |  Android 개발자  |  Android Developers

뷰 결합 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 뷰 결합 기능을 사용하면 뷰와 상호작용하는 코드를 쉽게 작성할 수 있습니다. 모듈에서 사용 설정

developer.android.com

 

3년전 안드로이드를 처음 공부할 때 만 해도 findViewByID를 사용했던 기억이 납니다. 지금은 이를 대체하기 위한 아주 좋은 도구가 하나 생겼는데 그것이 바로 viewBinding 기법입니다. 

 

📌 ViewBinding 이란 ?

  • xml과 연결되는 바인딩 클래스가 자동으로 생성되어 이 클래스의 멤버로 해당 클래스가 가진 view들을 간편하게 참조할 수 있습니다.
  • 바인딩 클래스는 정해진 명명 규칙에 따라서 만들어집니다.
Activity : activity_main.xml -> ActivityMainBinding
Fragment : fragment_home.xml -> FragmentHomeBinding
item : recycler_item.xml -> RecyclerItemBinding

📌ViewBinding 사용하기

앱 단위의 build.gradle에 아래와 같이 ViewBinding을 사용하겠다고 선언해줍니다.

android {
	...
    buildFeatures {
        viewBinding true
    }
}

 

🔨 Activity에서 사용

class MainActivity : AppCompatActivity(), NavigationBarView.OnItemSelectedListener {
    private lateinit var binding: ActivityMainBinding

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

 

🔨 Fragment에서 사용

Fragment에서 ViewBinding을 사용할 때 주의할 점은 onCraeteView( ) 에서 초기화 해줘야 한다는 점입니다. Fragment 생명 주기에서 onCreateView( ) 는 View를 생성할 때 호출합니다. 그러므로 View를 생성함과 동시에 ViewBinding을 완료하면 안전하게 View에 접근할 수 있습니다.

class MyPageFragment : Fragment() {
    private var _binding: FragmentMyPageBinding ?= null
    private val binding get() = _binding!!

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        _binding = FragmentMyPageBinding.inflate(inflater, container, false)
        return binding.root
    }
}