코틀린 기반으로 쓰여짐
1) 제트팩?
Android Jetpack is a set of components, tools and guidance to make great Android apps. The Android Jetpack components bring together the existing Support Library and Architecture Components and arranges them into four categories:
Android Jetpack은 훌륭한 Android 앱을 만들기 위한 구성 요소, 도구 및 지침 세트이다. Android Jetpack 구성 요소는 기존 지원 라이브러리 및 아키텍처 구성 요소를 결합하여 다음과 같은 네 가지 범주로 나뉩니다.
- Architecture
- UI
- Foundation
- Behavior
2) AAC?
AAC(Android Architecture Components)는 jetpack에서 Architecture에 해당하는 부분으로 테스트와 유지보수가 쉬운 안드로이드 앱을 디자인할 수 있도록 돕는 라이브러리 모음이다.
AAC를 활용하면 현재 구글에서 권장하는 MVVM 구조로 앱 설계가 가능해진다.
다음은 앱 아키텍쳐 가이드의 권장 구조의 도식도이다.
위 그림을 참고해서 보면 알겠지만 아키텍쳐파트에는 데이터 바인딩 라이프사이클 라이브데이타 네비게이션등이 있다.
오늘 우리는 아키텍쳐에 대해 본격적으로 공부하기 전 뷰 바인딩이라는것을 먼저 배워보려고 한다.
3) Viewbinding?
쉽게 얘기하면 findviewbyid를 쓰지 않고 XML의 view component에 접근하는 object를 반환받아 view에 접근하는 방식이다. object는 자동으로 만들어진다
3-1) 왜 써야해?
기본적으로 id는 같을 수 있다. findviewbyid 를 통하여 접근하게 되면 같은 id가 있다는 가정이면 어떤 id에 접근하는건지 명확하지 않다. 이를 방지하기 위하여 쓴다.또 레이아웃에 없는 id를 접근하게 될 때 nullsafe를 보장해준다.
3-2) 어떻게 써야해?
1)모듈 수준의 gradle 을 수정한다.
사용하고 있는 안드로이드 스튜디오 버전이 4.0 이상
buildFeatures {
viewBinding true
}
3.6 이상 4.0 미만
viewBinding {
enabled = true
}
사실 뭘 해도 둘다 적용되는걸로 보아 상관 없는거같다. 그래도 알고는 있자
2)액티비티에서 사용해보기
private lateinit var binding: ActivityMainBinding
참고로 액티비티 이름따라서 자동으로 만들어진다. 내 액티비티 이름이 mainActivity라 AcitivtyMainbinding인것이다. 이름 맞춰서 써주면 된다.
2-1)
원래는 R.layout.activity_main을 넘겨주지만 이번에는 우리가 생성한 루트 뷰를 넘겨준다
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
2-2) 사용해보기
binding.fab.setOnClickListener { view ->
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show()
}
위 코드는 리스너를 달아본것이다.
3)프레그먼트에서 사용해보기
class FirstFragment : Fragment() {
private var _binding: FragmentFirstBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = FragmentFirstBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.buttonFirst.setOnClickListener {
findNavController().navigate(R.id.action_FirstFragment_to_SecondFragment)
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
사실 액티비티랑 크게 다를건 없다.
우리가 하나 주목해봐야 할건 _binding 과 binding이 왜 두개나 있냐는건데
_binding은 우리가 사용하지 않을 때 자원을 null 값으로 만들어 주기 위해서 존재하는 것이다.
그니까 nul을 위해 존재 하는값임.
참고
안드로이드 뷰 바인딩(view binding) (tistory.com)
안드로이드 뷰 바인딩(view binding)
1. 뷰 바인딩 1-1. 라떼는 말이야... 1-2. 변천사 1-3. findViewById와의 차이점 2. 사용법 2-1. gradle 추가 2-2. 액티비티 2-3. 프래그먼트 2-4. viewBindingIgnore 1. 뷰 바인딩 1-1. 라떼는 말..
todaycode.tistory.com
'프로그래밍 > 안드로이드' 카테고리의 다른 글
프레그먼트와 네비게이션 바 - 안드로이드 (0) | 2022.09.21 |
---|---|
코루틴 - 안드로이드 (0) | 2022.09.13 |
Modern Android Development - 안드로이드 (0) | 2022.09.06 |
리사이클러뷰 - 안드로이드 (0) | 2022.08.22 |
다중 이미지 가져오기 - 안드로이드 (0) | 2022.08.08 |