wafflestudio/seminar-2020

Cannot call this method while RecyclerView is computing... 에러

Wits15730 opened this issue · 1 comments

과제 3진행 도중

java.lang.IllegalStateException: Cannot call this method while RecyclerView is computing a layout or scrolling androidx.recyclerview.widget.RecyclerView

와 같은 에러를 만났습니다.

그런데 stack overflow를 보니 그 이유는 notifydatasetchanged를 UI Thread에서 실행하지 않아서라고 하더군요

그래서 다음과 같이 만들었습니다

스크린샷 2020-10-24 오전 12 29 40

그런데도 앱에 계속 꺼지네요.. 주석처리를 해 봤는데 위의 notifydatasetchanged를 주석처리하면 빌드는 되는데 화면에 아무것도 안 나요고, 아니면 그냥 빌드가 안 됩니다.

왜 그런지 모르겠어서 이슈로 남깁니다 감사합니다!

말 그대로 ui를 수정하게되는 notifyDataSetChange 를 메인이 아닌 다른 쓰레드에서 불러서 위와같은 에러가 발생한 것 같습니다. 어노테이션을 붙인 @UiThread 는 해당 함수가 ui thread 가 아닌 곳에서 불리면 에러를 발생시키도록 지시하는 어노테이션이지, 저걸 uiThread 에서 부르게 해 주는 어노테이션이 아닙니다. (https://developer.android.com/reference/androidx/annotation/UiThread?hl=en)

setItems 가 불리는 쓰레드가 어디인지 확인해 보시고 해당 부분의 Rx Observer 를 잘 변경해주거나 runOnUiThread { ... } 로 문제를 해결할 수 있을 것 같습니다.