7주차 3일 fragment에서 viewbinding과 fragment의 구?조?
1. viewbidng
private var _binding: TodoFragmentBinding? = null
private val binding get() = _binding!!
/**
우리가 사용해야할 변수들은 변하지 않는 값이여야한다.
왜냐하면 신뢰할 수 있는 변수는 변치않아야 하기 때문.
때문에 사용하는 패턴은 val get() =을 사용하여 변수를 관리한다.
이러현 패턴은 뷰모델에서 이런 패턴을 주로 쓸 것이다.
위의 변수 선언 방식은 구글 가이드 형식이다.
변수를 조작하는 것은 _binding
변수를 사용하는 것은 binding
*/
해당 방법은 개발자 문서에 제공하는 원칙을 따른 것으로, 직접적으로 사용할 변수를 상수로 두고,
그 값은 _binding에서 get()해오는 형식이다.
2.fragment와 액티비티???
fragment와 acitvity의 생명주기는 다르다.
별개의 생명주기를 가지고 있으므로, 액티비티가 종료 되더라도(destroy) 살아있는 경우가 있을 수 있다.
그런 경우에는 _bidng을 직접적으로 destory해주어 메모리 누수를 잡을 수 있다.
또한 fragment를 액티비티에서 직접적으로 선언하여 제어할 수 있는데, 이전 선발대 과제에서 참조하자면
아래의 형식을 따른다.
val todofragment = TodoFragment
todofragment는 TodoFragment를 직접적으로 접근할 수 있게 만들어주는 통로가 되어 해당 안에 있는 변수와 함수들을 접근할 수 있게 해준다. 이는 내가 이전에 무식하게 데이터를 박아넣어서 새로 그리는 형식처럼이 아닌, fragment에 직접적으로 데이터를 꽂아넣을 수 있다는 말이기도 하다.
현재 이에 대한 고민을 하며 구현을 시도하고 있으나 쉽지 않다.
이전에 했던 방식에서
val todofragment = TodoFragment
todofragment.newInstance(getTitle,getDetail)
메인 액티비티에서 이처럼 값을 꽂아준다면
MainTabs(TodoFragment.newInstance(),
어댑터에서 해당 부분이 오류가 난다. 인스턴스에서 받을 값이 없기 때문이다.
따라서 튜터님께서 만드신 어댑터의 구조에 대해서 좀 더 고민해볼 필요가 있는 듯 하다.
참고한 블로그
https://cliearl.github.io/posts/android/prevent-fragment-memory-leak-during-viewbinding/
View Binding 사용시 Fragment의 메모리 누수 대응하기
들어가기 findViewById 대신 View Binding 사용하기 강의에서 View Binding에 대해 다루었습니다. View Binding을 도입하면 코드를 더 안전하게 작성할 수 있고 빌드도 빠르게 할 수 있습니다. Fragment에서의 메
cliearl.github.io
https://developer.android.com/topic/libraries/view-binding?hl=ko
뷰 결합 | Android 개발자 | Android Developers
뷰 결합 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 뷰 결합 기능을 사용하면 뷰와 상호작용하는 코드를 쉽게 작성할 수 있습니다. 모듈에서 사용 설정
developer.android.com