본문 바로가기
내일배움캠프 (스파르타 코딩 클럽) 안드로이드 2기/TIL

코드 MVC -> MVVM 전환 트러블 슈팅

by 키윤 2024. 3. 10.

트러블 슈팅 :

처음 있었던 문제:

  1. 초기화 문제 : lateinit을 by lazy로 바꾸어 주니까 해결
  2. invoke method 문제 : 라이브 데이터 초기값 넣어줌으로써 해결
  3. 리포지토리에 있는 값을 넘겨 오는데 한템포 지연되는 문제 : 아직 해결 못함.
  4. 멀티 뷰타입에 있는 값이 업데이트가 안되는 문제 : submit 리스트 위치 확인하면서 해결
  5. 멀티 뷰타입 안에있는 리사이클러뷰가 업데이트 안되는 문제 : adapter notify해줘야함. -> notify 해줬는데 [java.lang.IllegalStateException: Cannot call this method while RecyclerView is computing a layout or scrolling] 에러가 뜸. -> 백그라운드 스레드로 노티파이가 옮겨가서 에러가 뜬거라고 한다. MVVM 적용을하면서 비동기가 되었으니 말이되는듯? -> 그래서 코드 이렇게 바꿈 : binding.rvHori.post(Runnable { adapter.notifyDataSetChanged() })
  6. 멀티뷰타입 안에 있는 리사이클러뷰에 애초에 아이템 정보를 가지고 있는 어레이리스트를 넘겨주지 않고 있당. 코드 정리하면서 빼먹은 부분이 있는 것 같다. -> 홈 프래그먼트에서 값을 넘겨주기로 함. 멀티뷰타입어댑터에 생성자를 변수를 추가하고 그 값에 리사이클러뷰에 들어갈 어레이리스트를 넘겨줌. 그런데 이 어레이리스트를 리포지토리에서 가져와야 하기 때문에 어댑터를 홈 프래그먼트 안에서 지연초기화 해주고, 어레이 리스트가 옵져빙이 되었을 때 인스턴스를 생성해주었다. 그리고 써브밋 ㄱㄱ.

처음에 어댑터를 변수로 선언해주고 어댑터를 한번 더 인스턴스 생성하니까 아래와 같은 오류가 났었음. [ java.lang.IllegalStateException: Fragment HomeFragment{f7f2424} (18858a2b-e75f-44dd-9fad-a265ae449e0b) not attached to a context.] -> 어댑터를 두번 정의해줘서인감?ㅇㅇ 맞아용

갑자기 궁금한것.. --옵져빙을 할 때 순서가 있남?? -- 또 리포지토리에서 뷰모델로 값을 넘겨받아올 때 라이브데이터를 사용했다. 사용하기 싫은데 방법을 모르겠당.. 초반에 계속 오류 떠서 원래 하던 방식으로만 하게 되는것 같당