kotlin-android-extensions을 사용하면
👍 findViewById함수 생략가능
👎 여러 xml에서 id동일할 경우 코드가 헷갈려짐
👍 1. Null-safe
여러 xml의 같은 id 구분 가능 (아니면 Nullable로 만듦)
👍 2. Type-safe
오탈자 방지
👍 3. Build Speed
빌드 속도가 빨라짐
build.gradle에서
id 'kotlin-android-extensions' 플러그인 시
view.findViewById<Button>(R.id.button1).setOnClickListener{}
처럼 find하지 않아도
button1.setOnClickListener{}
가 가능한데,
뷰들이 많아지면 어디서 import했는지 헷갈리기 때문에 바인딩을 쓰자~!!
Build.gradle
buildFeatures {
viewBinding true
}
추가해주면 모든 xml파일에서 바인딩 클래스 생성
binding.button1.setOnClickListener{}
가 될 수 있음
private var _binding: FragmentFirstBinding? = null
private val binding get() = _binding!!
옵셔널형태의 바인딩을 만들어주고
실 사용할 옵셔널 벗긴 바인딩을 하나 더 만들어서 쓰자
WHY?
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
뷰바인딩 할 때 Fragment를 사용하지 않을 때 자원을 반환하게 하기위함
그리고
바인딩 게터함수에서 옵셔널을 벗기는 것은
뷰가 만들어지기 이전에 null이 되어 프래그먼트 뷰를 만들지 못하것을 막기 위함이다.
Basic Activity의 FirstFragment
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
}
onCreateView도 뷰의 버튼 접근도 바인등을 통해 해주자 ~